1

我正在制作一个图像滚动器,它每隔几秒(为了调试为 10 秒)或当用户单击图像时自动推进图像。我的代码(如下所示)有效,但如果图像的手动(单击)推进完成,我想“重置”10 秒计数器。我怎样才能做到这一点?我似乎对 clearInterval 没有运气。

... 
setInterval('gallery()',10000);
$("#gallery").click(function() {
clearInverval();// <--- not working
gallery();
});
…

我看到其他人将变量定义为(在我的情况下)setInterval('gallery()',10000);,但我也无法让它工作=/

PS我对C以外的语言了解有限

4

4 回答 4

4

setInterval方法返回间隔的句柄,您可以使用它来停止它:

var handle = window.setInterval(gallery,10000);
$("#gallery").click(function() {
  window.clearInterval(handle);
  gallery();
});
于 2013-04-14T02:41:43.013 回答
3

也许你可以做这样的事情:

var handle = setInterval(gallery,10000);
$("#gallery").click(function() {
    clearInterval(handle);

    /*
     * your #gallery.click event-handler code here
     */

    //finally, set automatic scrolling again
    handle = setInterval(gallery,10000);
});
于 2013-04-14T03:28:53.483 回答
1

您需要将 setInterval 设置为变量才能使其正常工作。

var interval = setInterval(gallery, 10000);
$('#gallery').click(function() {
    clearInterval(interval);
});
于 2013-04-14T02:41:54.803 回答
0

在进行基于原型的编码时,我努力制作一个简单的暂停/继续处理程序,因此不想使用任何外部插件。

下面的代码非常不言自明,有望节省其他编码人员的时间。

非功能示例:

    /** THIS DID NOT WORK 
    function Agent( name )
    {
         this.name = name;
         this.intervalID = undefined; // THIS DID NOT WORK!!!
    } // constructor

    Agent.prototype.start = function( speed )
    {
        var self = this;
        this.intervalID = setInterval( function(){ self.act(); }, speed );
    }; // start

    Agent.prototype.pause = function()
    {
        clearInterval( this.intervalID );
        console.log( "pause" );
    }; // pause
    **/

相反,您必须这样做:

var intervalID = undefined;
function Agent( name )
{
     this.name = name;
} // constructor

Agent.prototype.start = function( speed )
{
    var self = this;
    intervalID = setInterval( function(){ self.act(); }, speed );
}; // start

Agent.prototype.pause = function()
{
    clearInterval( intervalID );
    console.log( "pause" );
}; // pause
于 2014-05-11T12:47:56.440 回答