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;
或者 重新赋值;