如何在jQuery中的函数之外调用clearInterval?在setInterval之外

时间:2013-12-23 14:44:56

标签: javascript jquery function setinterval clearinterval

    function iPadMovie(id) {
    $(function () {
        var i = 1;
        var interval = setInterval(function () {
            jQuery('.animationMax img').attr({
                src: 'http://jdsports.scene7.com/is/image/JDSports/127932jd' + ('0' + i).slice(-2) + '?hei=255&wid=427&resmode=sharp&op_usm=1.1,0.5,0,0&defaultImage=JDSports/sizeImageMissing'
            });
            i++;
            if (i === 28) i = 1;
        }, 100);
    });
}

function playIpad(){
    iPadMovie();
}


function stopIpad(){
    clearInterval = interval;
}

你可以在这里看到小提琴:http://jsfiddle.net/Vv2u3/15/我希望能够停止电影并在按下播放时重新启动它。当然我可以在方法之外使用clearInterval吗?

2 个答案:

答案 0 :(得分:8)

以下是示例link

var interval;

function iPadMovie(id) {
    $(function () {
        var i = 1;
        interval = setInterval(function () {
            jQuery('.animationMax img').attr({
                src: 'http://jdsports.scene7.com/is/image/JDSports/127932jd' + ('0' + i).slice(-2) + '?hei=255&wid=427&resmode=sharp&op_usm=1.1,0.5,0,0&defaultImage=JDSports/sizeImageMissing'
            });
            i++;
            if (i === 28) i = 1;
        }, 100);
    });
}

function playIpad(){
    iPadMovie();
}

这里有点解释。 首先,您的区间变量(由setInterval返回的回调函数的实际处理程序)在iPadMovie()函数之外是不可见的,因此应该在此函数之外声明区间变量。 其次,您应该在clearInterval(handler)函数内调用stopIpad()函数。可以创建更多信息here

function stopIpad(){
    clearInterval(interval);
}

答案 1 :(得分:2)

clearInterval是一个功能。您应该调用它,将要清除的间隔作为唯一参数传递给它:

function stopIpad(){
    clearIntervar(interval);
}

这部分几乎是正确的,interval是一个变量,您可以在其中记住要清除的间隔句柄:

var interval = setInterval(...);

但是,interval变量需要在iPadMovie函数之外声明,以便stopIpad函数可见。将var语句移到外面。

此外,如果按两次播放按钮会发生什么?您可以在设置新间隔之前停止当前间隔:

var interval;
function iPadMovie(){
    clearInterval(interval);
    interval = setInterval(...);
}

作为旁注,是否有iPadMovie等待文件准备好的原因?我希望它只能在那之后被调用。如果是这种情况,您可以删除$(function(){...})包装器。