Jquery 1.4.2 animate的BUG

1 var d ={queue: false, duration: 500}
2 $('body').animate( {} ,d);
3 $('body').animate( {} ,d);
4 console.log(d)
5 return

运行以上代码, firebug会报 too much recursion 错,

原因是jquery speed中的(1.4.2 5696行)

 1 // Queueing
 2         opt.old = opt.complete;
 3         opt.complete = function() {
 4             if ( opt.queue !== false ) {
 5                 jQuery(this).dequeue();
 6             }
 7             if ( jQuery.isFunction( opt.old ) ) {
 8                 opt.old.call( this );
 9             }
10         };

他改变了anmate的options值(增加了complete),造了成isFunction的死循环,

修正方法:

1.改变jquery,删complete,(可能造成不可预知的错误),不推荐

2.改变animate参数,不要以变量方式传入,或者每次重新赋值

典型案例jQuery Masonry v2.0+  和jquery 1.4.2,开启动画时,会产生很多too much recursion, 修正方法:

obj.$el[ styleFn ]( obj.style, animOpts );(214行)前加入animOpts.complete = false;

或者 重新赋值;

posted @ 2013-04-17 10:51  无嗔  阅读(1203)  评论(0编辑  收藏  举报