【问题标题】:jQuery image slideshow - last slide appearing without movingjQuery图像幻灯片 - 最后一张幻灯片出现而不移动
【发布时间】:2017-10-11 19:09:02
【问题描述】:

我在 jQuery 中创建了一个简单的图像滑块,滑动效果很好我正在尝试做两件事:

  1. 我想使用transform:translate3d而不是margin-left(滑动时),所以它具有平滑度

  2. 第三张幻灯片完成后,第一张幻灯片没有滑动动画(出现急动)

有人可以给我一些想法吗?

这里是working JSfiddle demo

'use strict';
$(document).ready(function() {

  var winw = $(window).width();
  var winh = $(window).height();

  // variables
  var width = $(window).width();
  var timeFrame = 4000;
  var pause = 8000;
  var currentSlide = 1;

  // cache dom
  var $slider = $('#slider');
  var $slideContainer = $('.slides', $slider);
  var $slides = $('.slide', $slider);
  var interval;

  // functions
  function startSlider() {
    interval = setInterval(function() {
      //translate3d(x, y, z)
      $slideContainer.animate({
        'margin-left': '-=' + width
      }, timeFrame, function() {

        if (++currentSlide === $slides.length) {
          currentSlide = 1;
          $slideContainer.css('margin-left', 0);
        }
      });
    }, pause);
  }

  function pauseSlider() {
    clearInterval(interval);
  }

  // call functions
  //$slideContainer.on('mouseenter', pauseSlider).on('mouseleave', startSlider);
  startSlider();

  $("#slider .slide").height(winh);
  $("#slider .slide").width(winw);
});
html,
body {
  margin: 0;
  padding: 0;
  font-family: 'Open Sans';
  background: #eee;
  overflow: hidden;
}

#slider {
  width: 100%;
  height: 100%;
  overflow: hidden;
}

#slider .slides {
  display: block;
  width: 10000px;
  margin: 0;
  padding: 0;
}

#slider .slide {
  float: left;
  list-style-type: none;
  width: 1050px;
}

.slide1 {
  background: url(imgs/slide-image-1.jpg) no-repeat center;
}

.slide2 {
  background: url(imgs/slide-image-2.jpg)no-repeat center;
}

.slide3 {
  background: url(imgs/slide-image-3.jpg)no-repeat center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="slider">
  <ul class="slides">
    <li class="slide slide1"></li>
    <li class="slide slide2"></li>
    <li class="slide slide3"></li>
  </ul>
</div>

【问题讨论】:

    标签: javascript jquery html css slider


    【解决方案1】:

    您需要更新startSlider 函数并需要使用animate 更改margin-left

       function startSlider() {
            interval = setInterval(function() {
                //translate3d(x, y, z)
                $slideContainer.animate({'margin-left': '-='+width}, timeFrame, function() {
                    if (++currentSlide === $slides.length) {
                         currentSlide = 1;
                         //$slideContainer.css('margin-left', 0);
                         $slideContainer.animate({'margin-left': '0'});
                    }
                });
            }, pause);
        }
    

    Fiddle

    【讨论】:

    • 感谢@Manoj 的回答,但不幸的是它没有按预期工作,我想要实现的是当第三张也是最后一张幻灯片完成时,第一张幻灯片应该移动相同..继续滑动..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2015-04-21
    • 2013-08-24
    • 2012-12-24
    • 1970-01-01
    • 2021-01-17
    相关资源
    最近更新 更多