【问题标题】:Jquery animate() on multiple divs at the same timeJquery animate() 同时在多个 div 上
【发布时间】:2013-02-02 07:24:14
【问题描述】:

我正在尝试为我的窗口之外的 15 个 div 设置动画。 我首先使用以下代码将这些 div 动画到屏幕中:

$('.title2').bind('click',function(){

    $('#i1 div').delay( 0 ).animate({left : 200,    top :210}, {duration: 'slow',easing: 'easeOutBack'});
    $('#i2 div').delay(100).animate({left : 250,    top :350}, {duration: 'slow',easing: 'easeOutBack'});
    $('#i3 div').delay(200).animate({left : 550,    top :200}, {duration: 'slow',easing: 'easeOutBack'});
    $('#i4 div').delay(400).animate({left : 450,    top :70},  {duration: 'slow',easing: 'easeOutBack'});
    $('#i5 div').delay(100).animate({left : 595,    top :60}, {duration: 'slow',easing: 'easeOutBack'});
    $('#i6 div').delay(900).animate({left : 580,    top :410}, {duration: 'slow',easing: 'easeOutBack'});
    $('#i7 div').delay(500).animate({left : 1020,   top :230}, {duration: 'slow',easing: 'easeOutBack'});
    $('#i8 div').delay(600).animate({left : 530,    top :550}, {duration: 'slow',easing: 'easeOutBack'});
    $('#ix div').delay(700).animate({left : 875,    top :270}, {duration: 'slow',easing: 'easeOutBack'});
    $('#v1 div').delay(100).animate({left : 350,    top :200}, {duration: 'slow',easing: 'easeOutBack'});
    $('#v2 div').delay( 0 ).animate({left : 380,    top :395}, {duration: 'slow',easing: 'easeOutBack'});
    $('#v3 div').delay(200).animate({left : 700,    top :150}, {duration: 'slow',easing: 'easeOutBack'});
    $('#v4 div').delay(800).animate({left : 880,    top :70}, {duration: 'slow',easing: 'easeOutBack'});
    $('#t1 div').delay(200).animate({left : 525,    top :335}, {duration: 'slow',easing: 'easeOutBack'});
    $('#t2 div').delay(400).animate({left : 998,    top :370}, {duration: 'slow',easing: 'easeOutBack'});
});

现在,当我尝试使用单击删除所有这些 div 时,它们仅在 y 轴内移动。

这是返回动画的代码:

$('.title1').bind('click',function(){
        var alles = $('#i1 div,#i2 div,#i3 div,#i4 div,#i5 div,#i6 div,#i7 div,#i8 div,#ix div,#v1 div,#v2 div,#v3 div,#v4 div,#t1 div,#t2 div')
        alles.animate({right:0, top:200});
    });

希望大家帮忙。

【问题讨论】:

  • 如果没有更多上下文,很难知道原因。关于 alles,什么是“正确的”?
  • 它应该将所有的 div 向右移动。我只看到他们移动到顶部:200。左但是确实有效..有什么想法吗?
  • @frenchie 有一个“正确”的属性。
  • CSS 确实有一个“正确”属性@frenchie - developer.mozilla.org/en-US/docs/CSS/right
  • 如果它们是通过“右”定位的,那么开场动画应该不起作用,因为它使用“左”

标签: jquery jquery-animate


【解决方案1】:

试试这个。我相信您遇到的问题是您是先用左再用右进行动画处理,因此旧的左侧位置会被覆盖。您应该通过其中之一制作动画,但不能同时使用两者。在这里,我使用 offsetParent 的宽度来为左侧提供离屏定位。此外,bind 已被弃用,请改用on

$('.title1').on('click',function(){
        $('#i1 div,#i2 div,#i3 div,#i4 div,#i5 div,#i6 div,#i7 div,#i8 div,#ix div,#v1 div,#v2 div,#v3 div,#v4 div,#t1 div,#t2 div').each(function(){
              var that = $(this),
                  WW   = that.offsetParent().width();                  
              that.animate({left:WW, top:200});
        });

});

$('#i1 div,#i2 div,#i3 div,#i4 div,#i5 div,#i6 div,#i7 div,#i8 div,#ix div,#v1 div,#v2 div,#v3 div,#v4 div,#t1 div,#t2 div').each(function(){
     var that = $(this);
     that.data('origin',[that.css('left'),that.css('top')]);
});

$('.title1').on('click',function(){
        $('#i1 div,#i2 div,#i3 div,#i4 div,#i5 div,#i6 div,#i7 div,#i8 div,#ix div,#v1 div,#v2 div,#v3 div,#v4 div,#t1 div,#t2 div').each(function(){
              var that = $(this),
                  origin = that.data('origin');                  
              that.animate({left:origin[0], top:origin[1]});
        });

});

【讨论】:

  • 太棒了!感谢您的努力。到底是什么原因造成的?
  • 向左动画,然后向右动画。如果您同时使用这两个属性,浏览器将忽略其中一个,因为它们可能相互矛盾。
  • 好的,我明白了,是否也可以将所有 div 恢复到它们的原始位置(它们在动画之前的位置)?
  • 是的。但是您必须在移动它们之前记录这些数据,因此您可以使用该记录将它们移回。
  • 对此有什么建议吗?也许使用变量来存储 X 和 Y 值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 2016-02-13
相关资源
最近更新 更多