Javascript 为什么JQuery动画是同步的?

Javascript 为什么JQuery动画是同步的?,javascript,jquery,Javascript,Jquery,Javascript是单线程的,所以我认为函数是逐个执行的。但在上面的示例中,这三个段落似乎同时开始隐藏动画,同时结束,好像有三个线程分别运行一个不同的动画。为什么动画没有一个接一个地运行 没有真正的同步。启动动画不会阻止代码的执行。他们一个接一个地跑,但几乎同时跑。 jQuery动画实际上类似于setInterval,它们每X毫秒更新一次不透明度。但是在这两个X毫秒之间,代码正在运行。你的动画是在这段时间内开始的 如果不希望它们同时出现,则应在前一个回调中启动它们 下面是让它们一个接一个运行的

Javascript是单线程的,所以我认为函数是逐个执行的。但在上面的示例中,这三个段落似乎同时开始隐藏动画,同时结束,好像有三个线程分别运行一个不同的动画。为什么动画没有一个接一个地运行

没有真正的同步。启动动画不会阻止代码的执行。他们一个接一个地跑,但几乎同时跑。 jQuery动画实际上类似于setInterval,它们每X毫秒更新一次不透明度。但是在这两个X毫秒之间,代码正在运行。你的动画是在这段时间内开始的

如果不希望它们同时出现,则应在前一个回调中启动它们

下面是让它们一个接一个运行的代码:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("#a").hide(1000);
    $("#b").hide(1000);
    $("#c").hide(1000);

});
</script>
</head>
<body>

<p id="a">Paragraph 1</p>
<p id="b">Paragraph 2</p>
<p id="c">Paragraph 3</p>


</body>
</html>
如果您想使用异步库使代码更干净,那么对10个可以使用异步的元素执行该操作将是肮脏的


没有真正的同步。启动动画不会阻止代码的执行。他们一个接一个地跑,但几乎同时跑。 jQuery动画实际上类似于setInterval,它们每X毫秒更新一次不透明度。但是在这两个X毫秒之间,代码正在运行。你的动画是在这段时间内开始的

如果不希望它们同时出现,则应在前一个回调中启动它们

下面是让它们一个接一个运行的代码:

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("#a").hide(1000);
    $("#b").hide(1000);
    $("#c").hide(1000);

});
</script>
</head>
<body>

<p id="a">Paragraph 1</p>
<p id="b">Paragraph 2</p>
<p id="c">Paragraph 3</p>


</body>
</html>
如果您想使用异步库使代码更干净,那么对10个可以使用异步的元素执行该操作将是肮脏的


jQuery动画效果都是非阻塞的,这通常是您想要的。代码的其余部分不应该停止,因为您正在运行一个很长的动画

如果需要连续动画,可以使用回调:

async.eachSeries([$(".a"), $(".b"), $(".c")], function(elem, callback) {
   elem.hide(1000, callback);
});

如果在同一对象上设置动画,jQuery在内部使用队列,因此不需要使用回调,即,$'a.hide1000.show1000不会同时尝试隐藏和显示对象。

jQuery动画效果都是非阻塞的,这通常是您想要的。代码的其余部分不应该停止,因为您正在运行一个很长的动画

如果需要连续动画,可以使用回调:

async.eachSeries([$(".a"), $(".b"), $(".c")], function(elem, callback) {
   elem.hide(1000, callback);
});

如果在同一对象上设置动画,jQuery在内部使用队列,因此无需使用回调,即,$'a.hide1000.show1000不会同时尝试隐藏和显示对象。

它认为这与jQuery的这一部分有关

$('#a').hide(1000, function() {
   $('#b').hide(1000, fn...);
});

这是非阻塞js,它认为它与jquery的这一部分有关

$('#a').hide(1000, function() {
   $('#b').hide(1000, fn...);
});

这就是非阻塞js

也许这个问题有帮助它们在技术上是按顺序运行的,但是它们通过添加创建计时器和回调函数来设计为非阻塞的。测试这一点的一个简单方法是调试代码并逐步完成每一行。您将看到每个线程一个接一个地执行同步和单线程不是一回事。也许这个问题在技术上有帮助它们是按顺序运行的,但是通过添加创建计时器和回调函数,它们被设计成无阻塞的。测试这一点的一个简单方法是调试代码并逐步完成每一行。您将看到每个线程一个接一个地执行同步和单线程不是一回事。