Jquery ClearInterval不停止
我有以下JQuery代码:Jquery ClearInterval不停止,jquery,Jquery,我有以下JQuery代码: JModel.ClipThumbs.Clip.prototype = { interval: null, setThumb: function(src) { this.mainThumb.src = src; }, mouseEntered: function(el) { var temp = this; var x = 0; this.
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);
}
};
当我离开画廊时,旋转并没有停止
想法
编辑:修复程序是:
jQuery(this.mainThumb)
.bind('mouseenter', jQuery.proxy(this.mouseEntered, this))
.bind('mouseleave', jQuery.proxy(this.mouseLeft, this));
mouseleave
必须有一个带有此绑定的jQuery.proxy
才能访问它。这应该可以:
clearInterval( this.interval );
在
galleryImageMouseEnter
方法中,您正在实例对象上定义interval
属性。因此,在galleryImageMouseLeave方法中,您必须编写this.interval
来引用该属性。interval属性仅在函数范围中定义,它们不能相互联系。在原型外部定义一个interval属性,可以从两个函数中访问它
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);
}
};
希望这有帮助 不要重复多次
JModel.ClipThumbs.Clip.prototype.
而是这样做:JModel.ClipThumbs.Clip.prototype={setMainThumb:function(){…},galleryImageMouseEnter:function(){…},}
谢谢你的建议,现在看起来整洁多了!小心。当您将属性放入原型中时,该属性将由所有实例共享。通常,您希望将方法放入原型中。但是在上面的代码中,您还将interval
属性放入原型中,这意味着每个实例都将共享相同的属性。你可能不想这么做,对吧?我认为这两种方式都不重要,因为它的鼠标是开着的还是关着的。您可以在这里进行测试:您好,我已经更新了代码,它不会停止间隔,如果我在mouseleave方法中控制台记录this.interval,它将被视为未定义。您好,我已经更新了我的第一篇文章,我尝试按照您描述的方式放置间隔,但它仍然不会停止。