jQuery 动画修改

Posted

技术标签:

【中文标题】jQuery 动画修改【英文标题】:jQuery Animate Modification 【发布时间】:2014-06-13 09:14:36 【问题描述】:

H, 我正在尝试使用 step 函数修改一个 jQuery 动画,但它似乎没有生效。

$(el).animate(top:Y, left:X,
duration:500,queue:false,specialEasing:top:'linear',left:'linear',
step:function(now,fx)
    var someCalculations=x;
    fx.end=someCalculations;
);

我正在尝试修改动画的终点。实际问题在于我正在为元素左/右和上/下设置动画。向上/向下动画时,它会缩放以模拟距离。但是,在缩放时 - 这会影响计算出的平均动画速度,并且结果发生得太快。所以,我试图通过偏移动画中的结束位置来弥补这一点。

无论我做什么,它似乎都不想生效。记录 fx.end 值将显示不同的值(尝试 fx.end=0 并记录 0),但它不会动画到 0....

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

我认为你不能那样做。 fx.end = something; 实际上不会改变你开始的动画。 fx.end 只是你每一步得到的一个参考,告诉你这个动画会在它结束之前继续到 x。

你可能想尝试这样的事情:

$(el).animate( top : Y, left : X , 
  step : function( now, fx )
    var whereElementShouldActuallyBeRightNow = calculations();

    $(el).css(
      top : whereElementShouldActuallyBeRightNow.top,
      left : whereElementShouldActuallyBeRightNow.left
    );
  
);

因此,在每个动画步骤中,您都会将元素的位置校正到您实际想要的位置。

或者,当动画已经足够远时,您就一起停止动画:

$(el).animate( top : Y, left : X , 
  step : function( now, fx )
    if( now >= threshold )
      $(this).stop();
    
  
);

【讨论】:

谢谢 :) 我也尝试过直接更改动画元素的顶部 CSS - 但它似乎锁定了该属性?我可以使用上边距来抵消它,但这会导致其他问题...... 不幸的是,我想它会覆盖您在下一步中的更正。您应该更改未设置动画的属性。您还可以将边界从 0 变为 0 500 毫秒,然后在 step 函数中进行自己的动画计算(顶部/左侧)。【参考方案2】:

不改变 animate 中的 left 和 top 属性,而是在 step 函数中如何,并且使用“无用”的 css 属性(文本缩进)作为计数器:

$("#test").css( "text-indent", 100 );


$("#test").animate(textIndent: 0,
duration:5000,queue:false,specialEasing:top:'linear',left:'linear',
step:function(currentStep)
    console.log(currentStep);
    $("#test").css(left:5*currentStep,top:3*currentStep);
);

见JsFiddle或Proper example

【讨论】:

以上是关于jQuery 动画修改的主要内容,如果未能解决你的问题,请参考以下文章

用 JQuery 修改动画函数

如何使用JQuery修改SVG的宽度

tween.js

jquery 的animate()方法可以改变背景颜色么?

jQuery动画+实例

jQuery-4.动画篇---动画基础隐藏和显示