Jquery ClearInterval不停止

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.

我有以下JQuery代码:

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,它将被视为未定义。您好,我已经更新了我的第一篇文章,我尝试按照您描述的方式放置间隔,但它仍然不会停止。