2011-02-03 4 views
0

Я следующий код JQuery:не ClearInterval остановка

JModel.ClipThumbs.Clip.prototype = { 
    interval: null, 

    setThumb: function(src) { 
     this.mainThumb.src = src; 
    }, 
    mouseEntered: function(el) { 
     var temp  = this; 
     var x   = 0; 
     this.interval = setInterval(function() { 
      if (x >= temp.galleryImgs.length) { 
       x = 0; 
      } 
      // set main thumb 
      temp.setThumb(temp.galleryImgs[x].src); 
      // increment for the display (0/7 being bad looking to users) 
      x++; 
      // update image count display 
      $(temp.clipCount).html(""+x+"/"+temp.galleryImgs.length); 
     }, 1000); 
    }, 
    mouseLeft: function(el) { 
     clearInterval(this.interval); 
    } 
}; 

Когда я выхожу из поворота галереи не останавливается

идей?

EDIT: исправление было:

jQuery(this.mainThumb) 
    .bind('mouseenter', jQuery.proxy(this.mouseEntered, this)) 
    .bind('mouseleave', jQuery.proxy(this.mouseLeft, this)); 

mouseleave должен был иметь jQuery.proxy с этим связаны также получить доступ к этому.

+0

Вместо повторения 'JModel.ClipThumbs.Clip.prototype.' несколько раз, сделайте это так:' JModel.ClipThumbs.Clip.prototype = {setMainThumb: function() {...}, galleryImageMouseEnter: function() {...}, ...} ' –

+0

Благодарим за предложение, теперь оно выглядит очень аккуратно! – azz0r

+0

Будьте осторожны. Когда вы помещаете свойство в прототип, это свойство используется всеми экземплярами. Обычно вы хотите поместить методы в прототип. Но в приведенном выше коде вы также помещаете свойство 'interval' в прототип, что означает, что каждый экземпляр будет использовать это же свойство. Вы, вероятно, не хотите этого делать, верно? –

ответ

1

Это должно работать:

clearInterval(this.interval); 

В методе galleryImageMouseEnter вы определяете interval свойство на объекте экземпляра. Поэтому в методе galleryImageMouseLeave вам необходимо написать this.interval для ссылки на это свойство.

+0

Здравствуйте, я обновил код, он не останавливает интервал, если я консолью log this.interval в методе mouseleave, он приходит как не определено. – azz0r

0

Свойства интервала определяются только в области функций, они не могут достигать друг друга. Определение свойства интервала вне прототипа позволяет получить его от обеих функций.

JModel.ClipThumbs.Clip.prototype = { 

    // Define an interval object property 
    interval: null, 

    setMainThumb: function(src) { 
     this.mainThumb.src = src; 
    }, 
    galleryImageMouseEnter: function(el) { 
     var temp  = this; 
     var x   = 0; 
     this.interval = setInterval(function() { 
      if (x >= temp.galleryImgs.length) { 
       x = 0; 
      } 
      temp.setMainThumb(temp.galleryImgs[x].src); 
      x++; 
     }, 1000); 
    }, 
    galleryImageMouseLeave: function(el){ 
     clearInterval(this.interval); 
    } 
}; 

Надеюсь, это поможет!

+0

Здравствуйте, я обновил свой первый пост, я попробовал установить интервал, как вы описали, и он все равно не останавливает его. – azz0r