2011-10-11 46 views
3

多个实例我有一个的jsfiddle这里:http://jsfiddle.net/dztGA/22/使用的setInterval

目标:从本质上讲,我想有一个可以被摧毁,并在鼠标悬停重新创建在同一页上2个离散定时器/鼠标暂停(暂停)或手动进行(重新启动)。

问题:什么我的jsfiddle的单定时器说明的是,当我点击“停止计时器”,我的setInterval(存储在变量t)似乎有多个实例尽管有clearInterval(T)被破坏。当我点击“重新启动定时器”时,这变得很明显,它似乎有2个独立的定时器,如快速增量所示。

一个警告:我有尽可能多的研究做了这样我就可以了,而是因为我就做在页面上2个不同的滑块,我不能使用任何“清除所有的计时器”的方法,所以我尝试将每个存储在一个变量中。

我希望这很清楚。感谢您的观点。

+0

不能欺骗;在Ubuntu下的Chrome 14 - 工作正常。虽然提到'window.t'和't'取决于你在哪里给我heebie-jeebies。 –

+0

谢谢@DaveNewton,我想调用window.method(t)推断清除对象“window”的参数“t”!非常感谢您的洞察力。 –

+0

如果我反复点击“重启计时器”,不点击其他任何东西,计时器将失控。 – Blazemonger

回答

7

要解决当前的问题:加入clearInterval(window.t)在复位按钮onclick功能。

一种方法能够有多个定时器。不过,这需要一定的结构。
小提琴(6定时器!):http://jsfiddle.net/dztGA/27/

(function(){ //Anonymous function, to not leak variables to the global scope 
    var defaultSpeed = 3000; //Used when missing 
    var timerSpeed = [500, 1000, 2000, 4000, 8000]; 

    var intervals = []; 
    function increase(i){ 
     return function(){ 
      var elem = $("#count"+i); 
      elem.text(parseFloat(elem.text()) + 1); 
     } 
    } 
    function clear(i){ 
     return function(){ 
      clearInterval(intervals[i]); 
     } 
    } 
    function restart(i){ //Start AND restart 
     return function(){ 
      clear(i)(); 
      increase(i)(); 
      intervals[i] = setInterval(increase(i), timerSpeed[i]||defaultSpeed); 
     } 
    } 
    // Manual increment 
    $('input[name=increment]').each(function(i){ 
     $(this).click(function(){ 
      restart(i)(); 
      increase(i)(); 
     }); 
    }); 

    // Clear timer on "Clear" 
    $('input[name=clear]').each(function(i) { 
     $(this).click(clear(i)); 
    }); 

    // Restart timer on "Restart" 
    $('input[name=reset]').each(function(i) { 
     $(this).click(restart(i)); 

     //Optionally, activate each timer: 
     increase(i)(); 
    }); 
})(); 
+0

我的理解是,我在window对象上调用了.clearInterval方法,因此暗示了clearInterval(window.t)。无论如何,它的工作到目前为止,非常感谢! –

+0

已更新的答案。你已经说过你最初想要支持多个定时器;) –

+0

我现在正在编程 - 非常感谢你的出路,帮助指导我的下一步! –

2
// Clear timer on "Clear" 
$('input[name=clear]').click(function() { 
    window.clearInterval(t); 
}); 

应该

// Clear timer on "Clear" 
$('input[name=clear]').click(function() { 
    window.clearInterval(window.t); 
}); 

因为this是输入不Window