javascript - jQuery 图像幻灯片 - 最后一张幻灯片出现时没有移动

标签 javascript jquery html css slider

我在 jQuery 中创建了一个简单的图像 slider ,滑动工作正常我尝试做两件事:

  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>

最佳答案

您需要更新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

关于javascript - jQuery 图像幻灯片 - 最后一张幻灯片出现时没有移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43938144/

相关文章:

javascript - 我怎样才能 'lock' jQuery/Bootstrap/JS 中登录屏幕后面的页面?

html - 骨架网格用户代理样式表

javascript - jsTree 节点中的 anchor 标记生成错误

JavaScript:如何在旧浏览器上支持 let?

jquery 用另一个#div 的内容替换#div 的内容?

javascript - 在滚动条到达底部之前做 100px 的事情

jquery - 更改列中最后一个 div 的 CSS

javascript - html5 getUserMedia() 纵向模式

JavaScript 日志解析器项目 : Bad idea?

javascript - 使用 CasperJS 迭代参数化 URL 时仅执行最后一次迭代