有没有办法获得动画的剩余时间?

假设我有一些div,我使用.animate({opacity:0},400, function(){}); 为了它的孩子。 是否有可能让动画的剩余时间完成? 例如,剩余200毫秒,如果没有动画则为0? 谢谢。

为了帮助您更好地理解如何使用step函数[由gdoron发布]
我使用step函数创建了一个示例来获取剩余时间:

(单击get state!按钮停止动画并检索剩余时间!)

远程演示
不透明的演示

距离示例jQuery:

 var time = 4000; var distance = 300; var currentTime = 0; $('#ball').animate({ left: distance }, { duration: time, step: function (now, fx) { currentTime = Math.round((now * time) / distance); var data = fx.prop + ' ' + Math.round(now) + '; ' + currentTime + 'ms '; $('body').append('

' + data + '

'); }, easing: 'linear' }); $('#getTime').click(function () { $('#ball').stop(); $('body').prepend('

currentTime is:' + currentTime + ' ms; REMAINING: ' + (time - currentTime) + 'ms

'); });
  • 您可以看到我如何在animation step使用fx.prop来获取当前动画的( left )属性。
  • 您可以看到:知道动画时间和距离(不透明度,无论……),我们可以通过一些简单的数学( (now*time)/distance )轻松检索“已停止/暂停”状态,并感谢now返回值。

我不知道你为什么需要它,但是这个step可以帮助你提取这个值:

步function

.animate()的第二个版本提供了一个步骤选项 – 在动画的每一步触发的回调函数。 此function对于启用自定义动画类型或在动画发生时更改动画非常有用。 它接受两个参数(now和fx),并将其设置为动画的DOM元素。

now :每个步骤动画的属性的数值
fx :对jQuery.fx原型对象的引用,它包含许多属性,例如动画元素的elem,动画属性的第一个和最后一个值的开始和结束,以及动画属性的prop。

文档

听着,不要介意每个人都在谈论的stepfunction。 我曾经需要你做了什么并写了我自己的东西,简单地通过查看总的动画时间(你应该已经知道了,因为你曾经把这个数字给jQuery)以及当前和目标不透明度。 然后将该商与总动画时间相乘,将总和从总时间中减去。 就那么简单。

伪代码:

 func calculate-time-left-in-a-running-fade-in-animation: { var current_opacity = $elem.css('opacity'); var target_opacity = this.getTargetOpacity(); var total = this.getTotalAnimationTime(); var quotient = current_opacity / target_opacity; return total - quotient * total; }