javascript - 为什么我的 slider 到达末尾后会变成空白?

标签 javascript jquery html css

我对下面的幻灯片有两个问题。 它是一个“双 slider ”,因此,主体部分有两个同时 slider 。

首先,当我到达最后一个图像(第 9 个图像,因为两个 slider 都包含这么多图像)时,第二个 slider 继续正常工作(无限滑动图像),但第一个 slider 变成空白。 或者,如果我在开始时单击上一个按钮,那么第二个按钮不起作用并且图像消失,而第一个按钮工作得很好。不明白为什么。我尝试更改 HTML 中的“id”并对其进行样式设置,但没有任何变化。

<小时/> 其次,我最终需要使其更加动态,因此,避免在 HTML 中硬编码图像并将它们放入 JS 中并以某种方式将它们附加到 DOM 中,但不知道到底要做什么;创建数组,还是使用“createElement”?

考虑到提供的代码,哪种逻辑可用于将它们实际包含在 DOM 中并具有以下 slider ? 因为这是我正在制作的第二个 slider ,所以我发现它非常困难,所以欢迎任何帮助/提示/建议。

P.S 必须是 jQuery 且排除插件,所以请不要提供任何插件链接。

提前谢谢您。

var slides = $('.slide');

slides.first().before(slides.last());

$('button').on('click', function() {
  // Selecting the slides
  slides = $('.slide');
  // Selecting button
  var button = $(this);
  // Register active slide
  var activeSlide = $('.active');

  // Next function
  if (button.attr('id') == 'next') {

    slides.last().after(slides.first());

    activeSlide.removeClass('active').next('.slide').addClass('active');
  }

  // Previous function
  if (button.attr('id') == 'previous') {

    slides.first().before(slides.last());

    activeSlide.removeClass('active').prev('.slide').addClass('active');
  }
});
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.slider {
  position: relative;
  width: 100%;
  height: 300px;
  overflow: hidden;
}

.slide {
  width: 100%;
  height: 300px;
  position: absolute;
  transition: 0.6s ease;
  transform: translate(-100%, 0);
}

.slide img {
  width: 100%;
  height: 300px;
}

.slide.active {
  transform: translate(0, 0);
}

.slide.active~.slide {
  transform: translate(100%, 0);
}

body {
  text-align: center;
}

button {
  margin-top: 20px;
  border: none;
  border-radius: 0;
  background: aqua;
  color: #333;
  padding: 10px;
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="slider">
  <div class="slide active">
    <img src="Assets/slider-image-1.jpg" alt="">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-2.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-3.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-4.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-5.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-6.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-7.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-8.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-9.jpg">
  </div>
</div>
<div class="slider">
  <div class="slide active">
    <img src="Assets/slider-image-1.jpg" alt="">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-2.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-3.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-4.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-5.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-6.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-7.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-8.jpg">
  </div>
  <div class="slide">
    <img src="Assets/slider-image-9.jpg">
  </div>
</div>

<button id="previous"><img src="Assets/arrow-blue-left.png" alt=""></button>
<button id="next"><img src="Assets/arrow-blue-right.png" alt=""></button>

最佳答案

您的代码无法正常工作,因为 slides = $('.slide') 变量包含两个 slider 中的所有幻灯片。您必须独立操纵 slider 中的幻灯片。第二个失败是在您的示例中,第一张幻灯片是初始事件幻灯片。仅允许第二个 -> 倒数第二个范围内的幻灯片。工作示例here

function handleSlide(slider, direction) {
  var slides = $(slider).find('.slide');
  if(slides.length < 1) return;

  // Register active slide
  var activeSlide = $(slider).find('.active');

  // Next function
  if (direction == 'next') {
    slides.last().after(slides.first());
    activeSlide.removeClass('active').next('.slide').addClass('active');
  }

  // Previous function
  if (direction == 'previous') {
    slides.first().before(slides.last());
    activeSlide.removeClass('active').prev('.slide').addClass('active');
  }
}

$('button').on('click', function() {
    var button = $(this);
    handleSlide($("#slider1"), $(button).attr('id'));
  handleSlide($("#slider2"), $(button).attr('id'));
});

关于javascript - 为什么我的 slider 到达末尾后会变成空白?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59883085/

相关文章:

c# - 内存效率:Passing Html code of aspx page through codebehind

javascript - Canvas 上未正确绘制线条

html - 自动跳转到文本标题

javascript - 如何从客户端javascript调用 Node 函数? (HTML)

javascript - 保留点击 Angular ngFor的背景边框

javascript - 在 JavaScript 中将 O(n^3) 更改为 O(n^2)

java - 使用 editcell 启用卡住 jqgrid

javascript - ajax成功但PHP文件无法运行

javascript - 将脚本应用于项目中的所有页面

html - 为嵌套在固定容器内的绝对位置设置 Z-index