首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第一次单击jQuery setTimeout,然后第二次单击clearTimeout

第一次单击jQuery setTimeout,然后第二次单击clearTimeout
EN

Stack Overflow用户
提问于 2012-11-17 20:42:05
回答 1查看 1.3K关注 0票数 0

用户第一次单击按钮时,我希望div在循环动画之前有一个3秒的超时设置。

如果用户在这3秒内再次单击,我希望超时清除,动画停止。

到目前为止,我可以让超时正常工作,但我不能清除它并让动画停止。

HTML:

代码语言:javascript
复制
<a href="#" class="button">Button</a>
<div class="block"></div>

CSS:

代码语言:javascript
复制
div.block {
  position: absolute;
  display: block;
  height: 100px;
  width: 100px;
  top: -10px;
  left: 50%;
  background-color: red; }

jQuery:

代码语言:javascript
复制
$('a.button').toggle(function(){
    var blockTimer;
    blockTimer = setTimeout(function block(){
      $("div.block").animate({top: '400px'}, 4000, 'linear', function() { $(this).css('top', '-10px'); block(); });
        },3000);
}, function(){
clearTimeout(rainTimer);
    $('div.block').clearQueue().stop().fadeOut(500, function() { $(this).css('top', '-10px').show(); });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-17 20:47:34

您需要在函数的作用域之外定义变量,以便以后可以清除它。此外,您正在清除rainTimer,但却将其定义为blockTimer

代码语言:javascript
复制
var blockTimer;

$('a.button').toggle(function(){
    blockTimer = setTimeout(function block() {
        $("div.block").animate({top: '400px'}, 4000, 'linear', function() { $(this).css('top', '-10px'); block(); });
        }, 3000);
}, function() {
    clearTimeout(blockTimer);
    $('div.block').clearQueue().stop().fadeOut(500, function() { $(this).css('top', '-10px').show(); });
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13430671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档