【发布时间】:2017-10-19 21:07:30
【问题描述】:
我有一个按钮,点击后会在 500 毫秒内显示一个 div,然后在 500 毫秒后将类抖动添加到该 div 上。然后在 2 秒后使用 delay 删除此抖动类。我想要的是,如果用户继续按下按钮,那么除了最后一个回调之外,所有回调都会被取消。
如果点击多次出现问题代码:
$("button").click(function() {
$(".content").show({
duration: 500,
done: function() {
$(".content").addClass("shake");
var time = parseFloat($(".content").css("transition-duration")) * 1000;
$(".content").delay(time).queue(function() {
console.log("shake");
$(".content").removeClass("shake");
$(".content").dequeue();
});
}
})
});
div.content {
border: 1px solid red;
transition: background-color 2s ease-out;
background-color: black;
display: none;
}
div.content.shake {
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>click</button>
<div class="content">Content</div>
我的 clearQueue 解决方案:
$("button").click(function() {
$(".content").show({
duration: 500,
done: function() {
$(".content").clearQueue();
$(".content").addClass("shake");
var time = parseFloat($(".content").css("transition-duration")) * 1000;
$(".content").delay(time).queue(function() {
console.log("shake");
$(".content").removeClass("shake");
$(".content").dequeue();
});
}
})
});
div.content {
border: 1px solid red;
transition: background-color 2s ease-out;
background-color: black;
display: none;
}
div.content.shake {
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>click</button>
<div class="content">Content</div>
但是这个方法不允许添加shake 类。因为clearQueue后面提到的队列也被清空了。
如何防止 clearQueue() 清除未来的队列?为什么clearQueue() 会这样?它怎么知道将来会添加什么queue?
【问题讨论】:
-
您必须为此使用
.queue()吗?似乎有更好的选择来获得你想要的效果。 -
你能用
setTimeout代替.delay()吗? -
@jbe 是的,在我的实时网站上,我用
setTimout解决了这个问题。但我想了解clearQueue()的工作原理。 -
附带说明,您可以在函数上使用 debounce 来避免紧张用户的影响
标签: javascript jquery html css queue