0

我正在尝试在 jQuery/JavaScript 中创建一个滚入/滚出幻灯片。我的问题是,它需要重复。现在,当它重新开始时,图片不再来自右侧:(

我创建 slideLeft 函数的原因是,之后我需要创建 2 个函数,用户可以在其中手动按下左键或右键中断幻灯片。

这就是我所拥有的:

<script class="jsbin" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>

<div style='background: #c4c4c4; border: 1px solid #7b7b7b; height: 220px; overflow: hidden; padding: 5px; position: absolute; width: 590px;'>
  <div id='slider-image-1' style='left: 5px; background: red; height: 216px; padding: 2px; position: absolute; top: 5px; width: 586px;'></div>
  <div id='slider-image-2' style='left: 600px; background: yellow; height: 216px; padding: 2px; position: absolute; top: 5px; width: 586px;'></div>
  <div id='slider-image-3' style='left: 600px; background: green; height: 216px; padding: 2px; position: absolute; top: 5px; width: 586px;'></div>
  <div id='slider-image-4' style='left: 600px; background: blue; height: 216px; padding: 2px; position: absolute; top: 5px; width: 586px;'></div>
</div>

<script type='text/javascript'>
  $(document).ready(function() {
    var amount = 0;
    var nextamount = 1;
    setInterval(function() {
      amount++;
      nextamount++;
      if (nextamount === 5) nextamount = 1;
      if (amount === 5) amount = 1;
        slideLeft(amount, nextamount);
      }, 2000);
    });

  function slideLeft(i, j) {
    var $theItem = $('#slider-image-' + i);
    $theItem.animate({
      left: parseInt($theItem.css('left'), 10) == 5 ? -$theItem.outerWidth() : 5
    }, 500);

    var $theItem = $('#slider-image-' + j);
    $theItem.animate({
      left: parseInt($theItem.css('left'), 10) == 5 ? $theItem.outerWidth() + 10 : 5
    }, 500);

  };
</script>
4

2 回答 2

1

您需要准备要滚动的元素,使其位于右侧。

function slideLeft(i, j) {
  var $theItem = $('#slider-image-' + i);
  $theItem.animate({
    left: parseInt($theItem.css('left'), 10) == 5 ? -$theItem.outerWidth() : 5
  }, 500);

  var $theItem = $('#slider-image-' + j);
  $theItem.css('left', '600px'); // moves in item to the right before animation
  $theItem.animate({
    left: parseInt($theItem.css('left'), 10) == 5 ? $theItem.outerWidth() + 10 : 5
  }, 500);

};

我想你已经用你的 parseInt 试过了,但它不起作用,所以你可以摆脱它。

function slideLeft(i, j) {
  var $outItem = $('#slider-image-' + i);
  $outItem.animate({ left: -$outItem.outerWidth() }, 500);

  var $inItem = $('#slider-image-' + j);
  $inItem.css('left', '600px');
  $inItem.animate({ left: 5 }, 500);
}
于 2012-06-01T23:26:35.770 回答
0

我以前做过这样的事情,我不知道这是否会对你有所帮助,我所做的是:在图像/幻灯片集合的末尾添加第一张幻灯片的副本。然后,当您显示最后一张“真实”图像时,它看起来就像您正在滚动到第一张图像(但这只是第一张图像的副本),然后当动画完成时,您可以使用默认“左”css 值。如果您希望它双向滚动,您可以对第一张图像之前的最后一张图像/幻灯片的副本执行相同的操作,但是您必须以偏移量开始滑动条。

这有点难以解释,你明白了吗?:)

于 2012-06-01T22:47:32.127 回答