为了账号安全,请及时绑定邮箱和手机立即绑定

animate 运动时,须 动画1和动画2中,left加完后,才开始动画1中的width 和 height 的变化,然后是动画2的width和height的变化


   <head>
        <title>制作移动位置的动画</title>
        <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" type="text/javascript"></script>
        <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    
    <body>
        <h3>制作移动位置的动画</h3>
        <span></span>
        <div id="tip"></div>
        
        <script type="text/javascript">
            $(function () {
                $("span").animate({
                    left: "+=100px"
                }, 2000, function () {
                    $("span").animate({
                        height: '+=30px',
                        width: '+=30px'
                    }, 2000, function () {
                        $("#tip").html("执行1完成!");
                    });
                });
                $("span").animate({
                    left: "+=100px"
                }, 5000, function () {
                    $("span").animate({
                        height: '+=30px',
                        width: '+=30px'
                    }, 5000, function () {
                        $("#tip").html("执行2完成!");
                    });
                })
            });
        </script>
    </body>
</html>

animate 运动时,须 动画1和动画2中,left加完后,才开始动画1中的width 和 height  的变化,然后是动画2的width和height的变化,为什么不是是先执行完动画1的整个动画效果在执行动画2的left变化和width,height的变化?


正在回答

6 回答

JS运行在浏览器中,是单线程的,javascript引擎是单线程处理它的任务队列,你可以理解成就是普通函数和回调函数构成的队列,在某个特定的时刻只有特定的代码能够被执行。而浏览器是事件驱动的,浏览器中很多行为是异步的,会创建事件并放入执行队列中。

当第一个SPAN动画事件正要执行时,第二个SPAN动画事件进入执行队列(浏览器异步行为)。第一个SPAN动画事件执行结束后会执行第二个SPAN动画事件。

上面说了回调函数也是要进任务队列的,此时的第一个SPAN动画事件的第一个回调事件进入任务队列,在它之后第二个SPAN动画事件的第一个回调事件进入任务队列。如此类推。

0 回复 有任何疑惑可以回复我~
#1

月凝残秋

再补充一句: 函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式,所以当第二个事件SPAN正在队列里的时候未执行,所以在队列里它的后面跟着是第一次SPAN事件的回调事件(宽高改变动画事件)。
2016-04-24 回复 有任何疑惑可以回复我~

问题提的很棒!

0 回复 有任何疑惑可以回复我~

按你想要的效果来说,在执行动画2的时候应该是在动画1完成之后执行,那你就应该把动画2放到动画1里面去

0 回复 有任何疑惑可以回复我~

你对同一个对象操作,这样跟链式写法一的,等于代码都写在一起一样的。可以添加其它样式变化。。

0 回复 有任何疑惑可以回复我~

没有做条件

0 回复 有任何疑惑可以回复我~
#1

裸奔的萝卜丝 提问者

您好,不是很清楚,能详细说明下吗
2016-04-08 回复 有任何疑惑可以回复我~

恐怕你要看看animate 源码的写法了

0 回复 有任何疑惑可以回复我~
#1

裸奔的萝卜丝 提问者

以个人目前的水平这个有难度啊
2016-04-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
jQuery基础课程
  • 参与学习       154768    人
  • 解答问题       7184    个

加入课程学习,有效提高前端开发速度

进入课程

animate 运动时,须 动画1和动画2中,left加完后,才开始动画1中的width 和 height 的变化,然后是动画2的width和height的变化

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信