为什么 step2()
里面的 console.log($("#div1").width());
显示的不是 500
而是 100
回调函数不是等 step1()
执行完后再执行 step2()
吗?那应该 500
呀
html
<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style type="text/css"> *{ margin: 0; padding: 0;} #div1{ width: 100px; height: 100px; line-height: 100px; text-align: center; border: 1px #000 solid;} </style> <script type="text/javascript" src="js/jquery-2.1.3.min.js"></script> </head> <body> <div id="div1"> div1 </div> <div> <input type="button" value="点击"> </div> <script type="text/javascript"> function step1(callback) { $("#div1").animate({ width: "500px" }, 1000); callback(); } function step2() { $("#div1").animate({ height: "500px" }, 1000); console.log($("#div1").width()); } $(function(){ $("input").on("click", function(){ step1(step2); }); }) </script> </body> </html>
首先要理解同步,异步的概念,这个自己 Google。
jquery 的 animate 是异步的,也就是说在代码中,callback 的执行并不会等待动画执行完成在执行,而是在代码 animate 执行完成就执行了。
我举个例子:
运行这个,输出的是 21 而不是 12。和上面是类似的原因。