如何同时运行两个 jQuery 动画?

IT技术 javascript jquery animation
2021-02-10 18:29:41

是否可以同时在两个不同的元素上运行两个动画?我需要这个问题的反面Jquery queuing animations

我需要做这样的事情......

$('#first').animate({ width: 200 }, 200);
$('#second').animate({ width: 600 }, 200);

但同时运行这两个。我唯一能想到的就是setTimeout为每个动画使用一次,但我认为这不是最好的解决方案。

6个回答

就在这里!

$(function () {
    $("#first").animate({
       width: '200px'
    }, { duration: 200, queue: false });

    $("#second").animate({
       width: '600px'
    }, { duration: 200, queue: false });
});
请问给jQuery传递一个函数的目的是什么?
2021-03-17 18:29:41
谢谢你,不知道那个queue变量!
2021-03-24 18:29:41
您将如何为此添加 onComplete ?
2021-03-30 18:29:41
是的,您可以将队列设置为真/假,或者以这种方式给它一个字符串(队列名称),两个动画使用相同的计时器......
2021-04-02 18:29:41
@pilau 会在文档准备好后执行。这是 $(document).ready(function(){}) 的简写;并使您能够将 javascript 代码放在元素定义之前。
2021-04-10 18:29:41

那将同时运行是的。如果你想同时在同一个元素上运行两个动画怎么办?

$(function () {
    $('#first').animate({ width: '200px' }, 200);
    $('#first').animate({ marginTop: '50px' }, 200);
});

这最终使动画排队。要同时运行它们,您只需使用一行。

$(function () {
    $('#first').animate({ width: '200px', marginTop:'50px' }, 200);
});

有没有其他方法可以同时在同一个元素上运行两个不同的动画?

我相信我在 jQuery 文档中找到了解决方案:

将所有段落设置为左侧样式为 50,不透明度为 1(不透明,可见),在 500 毫秒内完成动画。它也会在队列外执行,这意味着它会自动启动而无需等待轮到它

$( "p" ).animate({
  left: "50px", opacity: 1
}, { duration: 500, queue: false }); 

只需添加:queue: false

如何在这个上集成完整的功能?:s
2021-03-18 18:29:41

如果您按原样运行上述程序,它们将显示为同时运行。

下面是一些测试代码:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(function () {
    $('#first').animate({ width: 200 }, 200);
    $('#second').animate({ width: 600 }, 200);
});
</script>
<div id="first" style="border:1px solid black; height:50px; width:50px"></div>
<div id="second" style="border:1px solid black; height:50px; width:50px"></div>

虽然对 animate 的连续调用确实会呈现它们同时运行的外观,但潜在的事实是它们是非常接近并行运行的不同动画。

为了确保动画确实同时运行,请使用:

$(function() {
    $('#first').animate({..., queue: 'my-animation'});
    $('#second').animate({..., queue: 'my-animation'});
    $('#first,#second').dequeue('my-animation');
});

可以将更多动画添加到“我的动画”队列中,并且所有动画都可以启动,前提是最后一个动画出队。

干杯,安东尼

如果您还需要一组其他动画完成触发动画,这里有一个依赖于Promise的答案,也可能有帮助:stackoverflow.com/a/35141159/4342230
2021-03-21 18:29:41
另外,@Borgboy,您的回答对我不起作用。根据stackoverflow.com/a/1218485/4342230,每个对象的动画队列是不同的。您必须将所有动画排队,然后执行一个新的 jQuery 查询,该查询包含所有已排队动画的元素,以便您可以对结果调用 dequeue,以便它们一起开始。换句话说,$('#first, #second').dequeue()
2021-04-08 18:29:41
@GuyPaddock - 是的,你是对的。我需要相应地更新我的答案。看起来这个变化发生在 jQuery 3.3.1 或之后的版本。
2021-04-08 18:29:41