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

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吗?

这是示例链接 。

 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()函数之外是不可见的,因此应该在此函数之外声明区间变量。 其次你应该在stopIpad()函数中调用clearInterval(handler) stopIpad()函数。 可以在此处创建更多信息。

 function stopIpad(){ clearInterval(interval); } 

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

 function stopIpad(){ clearIntervar(interval); } 

这部分几乎是正确的, interval是一个变量,你要记住要清除的间隔句柄:

 var interval = setInterval(...); 

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

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

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

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