2013-07-02 86 views
1

我想在点击一个按钮后调用一个Javascript函数,让它每100毫秒循环1.5秒,然后暂停它。每隔x秒调用一次Javascript函数并在y秒后停止?

这个想法是,我想让这个手风琴滑块能够使用这个自定义jQuery滚动条显示可滚动内容(我不知道任何其他更好的自定义跨浏览器滚动条)。

滚动条必须使用此功能在每次用户点击的项目之一,利用这段时间来重构:

$(".ac-big").customScrollbar("resize") 

为了使运行平稳的过渡,我用的setInterval如下面的例子:

<script type="text/javascript"> 
$(window).load(function() { 
$(function(){ 
    setInterval(function(){ 
    $(".ac-big").customScrollbar("resize") 
},100); 
}); 
</script> 

问题是脚本非常耗费资源。没有必要每100毫秒运行一次。只有在用户点击一个单选按钮后,我才会让它每100毫秒运行1.5秒。

这是另一个问题。由于手风琴滑块是使用单选按钮构建的,因此如何在单选按钮上调用javascript函数单击?

我已经将setTimeout和setInterval插入到标签中,因为我相信我必须使用这两个组合。如果我拥有所有必需的构建块,我不会在这里浪费您的时间。

+3

因为您标记了'setTimeout'和'setInterval',显然您已经拥有了所有您需要的基本构建块。你还需要什么?告诉我们你的尝试。 –

+0

我编辑了这个问题。希望现在适合现场条件。谢谢! –

+2

请不要链接到私人网络服务器上托管的页面。如果你真的想*补充*你的问题与现场演示,考虑jsfiddle,但你的问题需要自包含和答复,而不连接到任何场外代码 – meagar

回答

4

有鉴于此:

我想点击一个按钮后,调用JavaScript函数,使之环每100毫秒1,5秒钟,然后暂停。

这应做到:http://jsfiddle.net/pUWHm/

// I want to call a Javascript function after clicking a button 
$('.button').click(function() { 
    var started = Date.now(); 

    // make it loop every 100 milliseconds 
    var interval = setInterval(function(){ 

    // for 1.5 seconds 
    if (Date.now() - started > 1500) { 

     // and then pause it 
     clearInterval(interval); 

    } else { 

     // the thing to do every 100ms 
     $(".ac-big").customScrollbar("resize") 

    } 
    }, 100); // every 100 milliseconds 
}); 

的策略是,当你点击按钮启动的时间间隔,并保存该区间ID。你开始时也可以省钱。每次间隔运行时,检查它是否足够长。如果还没有时间,那就做吧。如果时间到了,请清除间隔,以免再次触发。

+0

我喜欢你的代码,但不会更容易只是做'我++'? – Jonathan

+0

你可以,但是如果你改变频率并忘记计算'i'的新的最大值?有很多种方法可以做到这一点,而且我通常会选择一种方式,至少一年后会让我陷入困境。 –

+0

你让同一个计时器运行一年,看看它与去年相比有多少次迭代;) – Jonathan