1.7版本不是那么遥远

[2011-10-06 13:10:12 --@jQuery]

1.7版本不是那么遥远,面对这满满一桌的丰盛大菜,我伸出筷子不知道到夹向哪一盘!心情是那么激动......先尝尝最近看的effect/animate部分吧?其余的统统打包!慢慢品尝!惭愧,已经积累了一些了,真的要留着是舍不得吃么?

animate部分(jQuery的effect部分)1.7的改进单从细节上看玩的非常聪明:

自定义的queue:以前animate函数只有fx一种queue,动画要么排队fx,要么立即独立执行,而现在可以建一个比如abc的queue,和fx可以并行,新进的动画不一定要排在fx队。
fx队是自动dequeue的:
if (type === "fx" && queue[0] !== "inprogress") {
        jQuery.dequeue(this, type);
}

自定义的queue则手动dequeue:
a.animate({width: 450},
{
        duration: 30000,
        queue: "abc"
}).animate({height: 300},
{
        duration: 2000,
        queue: false
}).dequeue('abc');


complete函数内执行stop函数不再影响其他动画
动画结束之前,会从jQuery.timers数组内以splice去掉循环执行的函数,这个过程可能会重新改变jQuery.timers数组:
a.eq(0).animate({width:300},3000);
a.eq(1).animate({width:300},2000,function(){a.eq(0).stop()});
a.eq(2).animate({width:300},4000);
1.7里以验证timers[ i ] === timer的方式确保了splice的timer确实是当前要正确splice的timer。否则,则在下一次循环时去掉,因为在第一次执行options.complete后options.complete = false;的原因,不会再执行options.complete,实际上这一句是修复另外一个BUG用的,却同时制约了另外一个会发生的
BUG。

complete函数出现Error不会循环执行jQuery.fx.tict
这种BUG不属于jQuery代码本身而是由用户造成,但结合options.complete只执行一次,并对于每一个进行动画属性来说都是独立options的这个特点,用执行一次后就改变options.complete值的方式轻易地解决了:
complete = options.complete;
if (complete) {
        options.complete = false;
        complete.call(elem);
}


stop函数清除delay函数的计时器
delay函数发起的计时器在1.7前是清除不了的,它的功能就是暂停动画,即使stop后,计时器到时候还是会执行排在队列后的动画。1.7的解决方案是在delay函数内通过data存储体系保存了该计时器的引用,即可以在之后清除。delay函数从没用实际中用过。这个函数可以作为插件存在,却被收纳到jQuery里了。

stop函数能给记住动画原始值
跟jQuery's Animated properties can be 'show', 'hide', and 'toggle'关联。
动画没有到0就stop紧跟着toogle时,动画是向0还是向原始值。1.7之前,toggle只要在属性值不是为0时,是向0的。1.7的这个改进就是在 没有到0就stop紧跟着toogle时(d.stop().slideToggle(3000);) 情况时不再向0.而是向原始值。似乎更合理。在stop[!gotoEnd]时存住开始值,为即将的toggle做准备:
t.saveState = function() {
        if (self.options.hide && jQuery._data(self.elem, 

"fxshow" + self.prop) === undefined) {
                jQuery._data(self.elem, "fxshow" + self.prop, 

self.start);
        }
};


animate部分越来不错了 ,1.7对event部分也进行了一次大修,通过SVN比对已经难以看出到底改了些什么,抽时间认真看看!event部分是jQuery里一道超级大餐。

本文禁止复制/转载!

共 2 评论

1. 2011-10-07 14:10:25,from snandy

变化太快,快跟不上了。



2. 2011-11-02 12:11:54,from Aira

Hey, you're the goto epxret. Thanks for hanging out here.



新增评论

分类导航