2011-11-06 65 views
0

我需要获取jquery在动画之前循环的步骤列表。jQuery在动画之前获得动画步骤,可能吗?

举例来说,如果我有:

$("div#whatever").animate({"left":500}, { 
    duration: 1000, 
    easing: 'easeOutQuad' 
}); 

我真的想是得到“左”的立场阵列之前调用动画。

喜欢:

var positions = ['0','255','350','390','420','440','455'..... '500']; 

注意,还有的宽松政策以兼顾。 我已经看到动画的一些时髦的用法来计算数字,这是我最初的想法,但所有这些都意味着运行我不能做的动画。

任何人有任何想法如何做到这一点?

+0

您可能需要窥探动画源代码并在'for ...'循环中模拟步进算法 – JCOC611

+0

我希望这不是必要的,但它是最糟糕的情况:-)有一个当你考虑所有的缓动时也是如此。 – Alex

回答

0

创建您自己的动画功能?

jQuery.fn.animateLeft = function(prop1, prop2) { 
    var left = new Array(); 

    //add left 
    this.each(function() { 
    if(this.style && this.style.left) { 
     left.push(this.style.left); 
    } 
    else { 
     left.push(0); 
    } 
    } 

    //animate 
    this.animate(prop1, prop2); 
    return left; 
}; 

其次

var positions = $("div#whatever").animateLeft ({"left":500}, { 
    duration: 1000, 
    easing: 'easeOutQuad' 
}); 
+0

这需要运行一个动画过程并等待,我真正想要得到的是在运行动画之前的一个点数组,它必须被无缝地计算并且之前序列。 – Alex

0

您可以编写一个函数来处理该位置阵列。当动画结束时,函数animation()将再次被数组和一个保存下一个索引的变量调用。

该函数可以是这样的:

var positions = ['0','255','350','390','420','440','500']; 
    function animate(positions,i){ 

    if(typeof i === 'undefined'){ 
    i = 0; 
    } 

    if(i < positions.length){ 


    $("#hello").animate({"left":positions[i]}, { 
    duration: 1000, 
    complete: function(){ 
    i++; 
    animate(positions,i); 
    } 
}); 
} 

}

动画(位置);