按顺序对每个()返回的元素进行动画处理
我正在使用此脚本对锚点内的一些图像进行动画处理:
$('#locations a').each(function() {
// set opacity 0 take initial position
$(this).css('opacity', '0');
var left = $(this).css('left');
var top = $(this).css('top');
// reset position and animate
$(this).css({'left' : '0', 'top' : '0'});
$(this).animate({left: left, top: top, opacity: 1});
});
我需要使用 jqueryeach() 函数来获取初始位置。 但是,我想按顺序对返回的元素进行动画处理。这可能吗?
I'm using this script to animate some images inside anchors:
$('#locations a').each(function() {
// set opacity 0 take initial position
$(this).css('opacity', '0');
var left = $(this).css('left');
var top = $(this).css('top');
// reset position and animate
$(this).css({'left' : '0', 'top' : '0'});
$(this).animate({left: left, top: top, opacity: 1});
});
I need to use the jquery each() function to take the initial position.
However, I want to animate the returned elements in order. Is that possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过一种不太复杂的方式来完成此操作,如下所示:
您可以在此处进行测试。主要是简化,唯一重要的添加是
.delay(400 * i)
和i
到function(i) {
。这仅使用作为第一个参数提供给
.each() 的
的回调并乘以i
.delay()
(在此元素上启动动画之前的延迟)乘以每个元素的该数量。400
用于默认持续时间 的.animate()
为 400 毫秒。因此第一个元素立即开始,下一个元素在 400 毫秒后开始,下一个元素在 800 毫秒后开始,依此类推……正好在它之前的动画应该完成的时候开始。您当然可以创建一个自定义队列等...但这似乎更简单:)
编辑:因为您对构建队列感兴趣,所以它看起来像这样:
您可以在这里测试,我们使用的是
.queue()
将函数在document
上的自定义队列中排队,然后用.dequeue()
。n
是队列中的下一个函数,当 < code>.animate() 通过将其提供为要运行的回调函数来完成。You can do this in a not-so-complicated way, like this:
You can test it here. It's mostly simplification, the only important additions are
.delay(400 * i)
and thei
tofunction(i) {
.This just uses the
i
provided as the first parameter to.each()
's callback and multiplies the.delay()
(delay before starting animation on this element) times that amount for each element. The400
is for the default duration of.animate()
being 400ms. So the first element starts immediately, the next in 400ms, the next in 800ms, and so on...right when the animation prior to it should be finishing.You can of course make a custom queue, etc...but this seems a bit simpler :)
Edit: since you're interested in building the queue, it'd look like this:
You can test it here, we're using
.queue()
to queue the functions in a custom queue up ondocument
then kicking it off with a.dequeue()
. Then
is the next function in the queue, we're calling that when the.animate()
finishes by providing it as the callback function to run.
您可以在 jQuery 中设置自己的自定义队列。
http://api.jquery.com/queue/
基于您的评论的示例
我创建了一个名为“MyCustomQueue”的自定义队列,并任意将其放在 body 标记上。我使用 JavaScript 闭包通过设置名为“this$”的变量来对队列的每个函数中的特定元素进行动画处理。
You can setup your own custom queue in jQuery.
http://api.jquery.com/queue/
Example based on your comment
I created a custom queue named "MyCustomQueue" and I arbitrarily put it on the body tag. I used a JavaScript closure to animate a specific element in each function of the queue by setting a variable named "this$".