【发布时间】:2015-09-04 13:23:25
【问题描述】:
详情
我有一个里面有动画的函数,当点击按钮时,它会.append 一个div 到body。 div 然后将动画其位置向下移动一点。当添加另一个时,所有divs 也会向下移动,因此它们不会重叠。
现在我们遇到了问题!当向按钮发送垃圾邮件以创建 divs 时,它们会重叠。
我们怎样才能阻止这种情况发生?
注意事项:
- 所以只有当最后一个函数完成所有动画后,下一个调用才能开始
- 需要记住并运行函数多少次单击按钮
- 我的插件中的函数有一些需要记住的选项(例如弹出窗口的背景颜色)。
我尝试了什么
我看到它的方式是,我想创建一个队列,用于记录您单击按钮的次数,并在 x 时间过去后释放下一行(足以完成所有动画)。问题是我找不到在 jQuery 中执行此操作的方法。
- 我已经研究过在 jQuery 中使用
.queue但没有找到方法 这可以帮助解决这个问题。 - 我在函数中添加了
setTimeout,但这会导致点击延迟
我觉得这是一件非常简单的事情,但我自己搞砸了几个小时后找不到解决方案。
演示
我为这个问题创建了一个演示,我的真实版本是一个插件,因此它有自己的功能。这只是一个非常基本的版本。
$("button").click(function() {
$("body").append("<div></div>");
$($("div").get().reverse()).each(function(index) {
$(this).animate({
top: "+=120px"
}, {
duration: 600,
queue: false
});
if (index >= 2) {
// Fade out and then remove the item
$(this).fadeOut("fast", function() {
$(this).remove();
});
}
});
});
div {
width: 400px;
height: 50px;
background: rgba(0, 0, 0, .4);
position: absolute;
top: 0;
right: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click</button>
【问题讨论】:
-
您是要在队列中添加动画还是在 previos 完成之前不允许新动画?
-
@LazarevAlexandr 我想记住该函数已被调用,并且仅在之前运行的函数完成后才启动下一个函数(连同其所有动画)。
-
所以实际上它是一个队列:)
标签: javascript jquery animation