我可以在 jQuery 中为每个动画步骤实现回调吗?
我想在我的网站中实现一个动画:
- 需要更新多个 DOM 元素。
- 每个 DOM 元素都有自己的动画路径(取决于它们的位置)
- 并且仍然具有缓动效果。
如果我为每个元素调用 jQuery 的 animate() 函数(队列: false),它将使每个元素与其余元素稍微不同步。这是有道理的,因为有多个计时器在运行。
我可以只有一个计时器事件,并为每个动画步骤提供回调吗? 像这样的东西:
jQuery.fx.timeline( from, to, easing, function( step, total ) {
var percentage = step / total;
// ...update DOM elements based on the percentage of the animation
} );
I'd like to implement an animation in my site which:
- needs to update multiple DOM elements.
- each DOM element has it's own animation path (depends on their position)
- and still have an easing effect.
If I call jQuery's animate() function for each element (with queue: false), it will make each element move slightly out of sync with the rest. Makes sense, since there are multiple timers running.
Can I have just one timer event, with a callback for each animation step?
Something like:
jQuery.fx.timeline( from, to, easing, function( step, total ) {
var percentage = step / total;
// ...update DOM elements based on the percentage of the animation
} );
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
看看这篇文章: http://james.padolsey.com/javascript/ fun-with-jquerys-animate/
非常清晰,非常简单!
look at this article: http://james.padolsey.com/javascript/fun-with-jquerys-animate/
very clear, very easy!
JavaScript 中的所有计时器都基于原生普通老式 JavaScript 函数
setInterval()
或setTimeout()
。甚至 jQuery 在内部也使用了它。同步计时器的技巧是确保只有一个
setInterval()
被调用,所以我们自己构建一些东西。动画可以设计为:
在每一步,可以计算当前进度/百分比:
var Percentage = ( currentStep / TotalSteps );
现在,每次通过
setInterval()
调用您的函数时,您都可以一次性将所有 DOM 元素设置到正确的位置。要找出每个动画帧中元素应位于的位置,您可以使用:可以直接调用 jQuery 缓动函数,最终语句变为:
我已将其变成一个类:
现在您可以使用:
添加暂停/resume 是给读者的一个练习。
All timers in JavaScript are based on the native plain old school JavaScript function
setInterval()
orsetTimeout()
. Even jQuery uses this internally.The trick to synchronize timers, is making sure there is only one
setInterval()
is invoked, so build something ourselves.An animation can be designed with:
At each step, the current progress/percentage can be calculated:
var percentage = ( currentStep / totalSteps );
Now, each time your function is called by
setInterval()
, you can set all DOM elements at once to the correct positions. To find out where an element should be at each animation frame, you use the:The jQuery easing functions can be called directly, and the final statement becomes:
I've turned this into a class:
And now you can use:
Adding a pause/resume is an exercise for the reader.
一个简单的答案就可以做到。也许有人会像我一样搜索它。
我们可以在动画函数中使用“step”属性。
因此,对于每一步,这将记录当前的左侧位置
A simple answer to do it. Maybe someone will search it as i did.
We can user the "step" attribute in the animation function.
So for each step, this will log the current left position
您检查过 jquery 队列 吗?
您可以对动画进行排队并为每个动画设置回调,我认为如果您稍微使用它,您就可以实现您想要的。
希望有帮助,思南。
did you check jquery queue?
You can queue your animations and set a callback on each of them, I think if you play little bit with it you can achieve what you want.
Hope it helps, Sinan.