【问题标题】:Jquery Animation - looping divsJquery Animation - 循环 div
【发布时间】:2016-01-19 20:01:07
【问题描述】:

大家好,我在循环这些 div 时遇到了问题。

当第一个 div 离开屏幕时,我希望它跳回到屏幕的开头并再次开始循环。这是jsfiddle

我也有这个我认为应该可以工作的功能,但它什么也没做/我做错了什么哈哈。

var boxes = $('#inner>div');
var speeds = [
0.5, 0.5, 0.35, 0.45, 0.46, 0.55, 0.5, 0.5
];

function update() {
  var width = $('#wrapper').width;

  // update boxes
  for (var i = 0; i < boxes.length; i++) {
    var box = boxes[i];
    var speed = speeds[i];

    box.left -= speed;

    if (box.left < -box.width) {
      cloud.left = width;
    }
  };
  window.setTimeout(update, 2000);
};

【问题讨论】:

    标签: javascript jquery html css jquery-animate


    【解决方案1】:

    您会希望您的计时器每 2000 毫秒运行一次以上,我将其更改为每 20 毫秒运行一次。此解决方案基于使用 position: absolute; 并更改 div 的 left 属性。

    您可以在此处进行的一些性能改进是存储 div 的宽度和窗口的宽度,这样您就不必在每个循环中重新计算这些值。

    如果你想提高 div 的速度,你可以让计时器更快(更多的 cpu 负载),或者你可以增加速度数组中的值(没有大的性能影响,可能看起来不那么流畅)

    var boxes = $('#inner>div');
    var speeds = [
    0.5, 0.5, 0.35, 0.45, 0.46, 0.55, 0.5, 0.5
    ];
    
    function update() {
      var width = $('#wrapper').width;
    
      // update boxes
      for (var i = 0; i < boxes.length; i++) {
        var box = $(boxes[i]);
        var speed = speeds[i];
        var leftPos = box.position().left;
        box.css({left: leftPos + speed});
    
        if (leftPos + box.width() > $(window).width()) {
          box.css({left: 0});
        }
      };
      window.setTimeout(update, 20);
    };
    
    $('#inner>div').each(function(i){
        $(this).css('top', i * 50);
    });
    
    update();
    

    小提琴: https://jsfiddle.net/u160Lg3h/

    【讨论】:

    • 谢谢!很好的解释。 @IrkenInvader
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多