Search code examples
jqueryimagetimerrotationsrc

Create an interval to change image in jQuery?


I have a working script like this:

jQuery(document).ready(function(){

    $('.video-thumb img').bind('mouseover',function(){
        var new = $(this).attr('src').replace(/default.jpg/,'1.jpg');
        $(this).attr('src',new);
    }).bind('mouseout',function(){
        var default = $(this).attr('src').replace(/[0-9].jpg/,'default.jpg');
        $(this).attr('src',default);
    });

});

Yeah, you guessed right. It's made to change YouTube's thumbnail on interval. However, I have no idea, how to create the interval. It now changes the thumbnail to 1.jpg, which is another thumbnail, but it should next change the image to 2.jpg in 1 second and so on.

The whole snippet should probably be written from scratch. Advice?

Hope you understood :-D

EDIT: I changed the variable-names from finnish words, I don't use them. Just in this example.

Martti Laine


Solution

  • new and default are reserved words in javascript. You cannot use them.

    To create an interval you should use setInterval:

    setInterval(function() {
      // do something
      // ...
    }, 1000); // <- 1000ms = 1s
    

    [See it in action]

    jQuery(document).ready(function() {
    
        var timer, imgsrc, cnt = 0;
    
        $('.video-thumb img').bind('mouseover', function() {
    
          // if there is no timer
          if (!timer) {
    
            var $t = $(this);
    
            // get the image src
            imgsrc = $t.attr('src').replace('default.jpg','');
    
            // start a new timer
            timer = setInterval(function() {
    
              // periodically change the src
              $t.attr('src', imgsrc + (cnt+1) + ".jpg");
    
              // and adjust the counter
              cnt = ( cnt + 1 ) % 3; // 0, 1, 2
    
            }, 1000); // <- 1000ms = 1s
          }
        }).bind('mouseout',function() {
    
          // stop rotation
          if (timer) {
            clearInterval(timer);
            timer = null;
          }
    
          // set the default img
          $(this).attr('src', imgsrc + 'default.jpg');
        });
    });