jQuery同步动画

[2011-09-26 13:09:35 --@jQuery]

一个容易忽略的细节,可能没有人会考虑到,但jQuery却很好地解决了它,让我佩服:

复杂的dom操作前后之间之间会有时间差,虽然几乎可以不用考虑,但在一定数量级别时,差异是存在的:
http://cmc3.cn/animate/animate-1.3.2.html

300个节点一起animate,中途停止时,预想中,每个节点所到达的位置应该是一致的。实际上位置却不一样,jquery1.3.2里,动画的关键函数中计算时间都是用new Date:
function now(){
        return +new Date;
}

custom: function(from, to, unit) {
        this.startTime = now();

step: function(gotoEnd) {
        var t = now();


因为代码执行先后顺序产生时间差的原因!jQuery的解决方案:统一一个时间:
// Animations created synchronously will run 

synchronously
function createFxNow() {
        setTimeout(clearFxNow, 0);
        return (fxNow = jQuery.now());
}

function clearFxNow() {
        fxNow = undefined;
}


利用javascript单线程,setTimeout在animate函数执行后只规定一个startTime.并且在计时器中,每次时间间隔时取的时间也是一致的。setTimeout(clearFxNow, 0);表示在当前进程执行完成后立即执行clearFxNow函数。

一致的动画:
http://cmc3.cn/animate/animate-1.6.html

本文禁止复制/转载!

共 1 评论

1. 2011-11-01 23:11:18,from Honeysuckle

AKAIK you've got the asnewr in one!



新增评论

分类导航