【问题标题】:Simple Carousel Slider start from second slide (javascript)简单的轮播滑块从第二张幻灯片开始(javascript)
【发布时间】:2020-08-20 08:48:07
【问题描述】:

我编写了一个简单的轮播滑块。但我需要一些帮助。如果我从第一张幻灯片开始,我的轮播滑块效果很好。但我想从第二张幻灯片开始,我也可以在 init 函数 中使用 goToSlide(1) 来执行此操作,但我不想看到我的第一张幻灯片向左滑动。这是简单的 codepen 链接 (https://codepen.io/ruslancik/pen/QWNKowx?editors=0010)。有人可以帮我吗?

const slideImage = document.querySelectorAll(".slide-image");
const slidesContainer = document.querySelector(".slides-container");

let slideWidth = slideImage[0].clientWidth;
let currentSlide = 0;

function init() {

  slideImage.forEach((img, i) => {
    img.style.left = i * 100 + "%";
  });

  slideImage[0].classList.add("active");
  
  //want to start from second slide
  goToSlide(1);
}

init()




function goToSlide(slideNumber) {
  slidesContainer.style.transform =
    "translateX(-" + slideWidth * slideNumber + "px)";

  currentSlide = slideNumber;
}

【问题讨论】:

    标签: javascript slider carousel


    【解决方案1】:

    const slidesContainer = document.querySelector(".slides-container");
    const originalSlideImage = document.querySelectorAll(".slide-image");
    
    let isRestored = false;
    let isInitialSlideButtonClick = true;
    
    function init() {
      const slideImage = originalSlideImage;
      let slideWidth = slideImage[0].clientWidth;
      let currentSlide = 0;
      slideImage.forEach((img, i) => {
        img.style.left = i * 100 + "%";
      });
    
      let newSlideImage = [...slideImage];
    
      swap(newSlideImage);
    
    
      newSlideImage.forEach(img => {
        slidesContainer.appendChild(img)
      });
    
    }
    
    
    init();
    
    function restoreOriginalSlides() {
      if (!isRestored) {
        slidesContainer.innerHTML = "";
        originalSlideImage.forEach((img, i) => {
          img.classList.remove('active')
          img.style.left = i * 100 + "%";
          slidesContainer.appendChild(img)
        });
        isRestored = true;
      }
    }
    
    
    function swap(slideImageArray) {
      let firstSlide = slideImageArray[0];
      let desiredFirstSlideIndex = 1;
      let desiredFirstSlide = slideImageArray[desiredFirstSlideIndex];
    
      slidesContainer.innerHTML = ""
    
      let tempSlide = firstSlide;
      let firstLeftStyle = firstSlide.style.left
      let desiredLeftStyle = desiredFirstSlide.style.left
    
      firstSlide = desiredFirstSlide;
      firstSlide.style.left = firstLeftStyle;
    
      desiredFirstSlide = tempSlide;
      desiredFirstSlide.style.left = desiredLeftStyle;
    
      slideImageArray[0] = firstSlide;
      slideImageArray[desiredFirstSlideIndex] = desiredFirstSlide;
    }
    
    function goToSlide(slideNumber) {
      if (isInitialSlideButtonClick) {
        restoreOriginalSlides();
        isInitialSlideButtonClick = false;
      }
    
      const slideImage = document.querySelectorAll(".slide-image");
      let slideWidth = slideImage[0].clientWidth;
      let currentSlide = slideNumber;
      slideImage.forEach((img, index) => {
        index != currentSlide ? img.classList.remove('active') : img.classList.add('active');
      })
    
      slidesContainer.style.transform =
        "translateX(-" + slideWidth * slideNumber + "px)";
    
    }
    body {
      margin: 0;
      box-sizing: border-box;
      background: #222;
    }
    
    h1 {
      text-align: center;
      color: #eee;
      font-family: "Roboto Thin", sans-serif;
      text-transform: uppercase;
      letter-spacing: 8px;
    }
    
    .wrapper {
      width: 100%;
      overflow: hidden;
    }
    
    .slides-container {
      height: 500px;
      transition: 900ms cubic-bezier(0.48, 0.15, 0.18, 1);
      position: relative;
    }
    
    .slide-image {
      height: 100%;
      width: 100%;
      position: absolute;
    }
    <div class="wrapper">
      <div class="slides-container">
        <div class="slide-image">
          <h1>1</h1>
        </div>
    
        <div class="slide-image active">
          <h1>2</h1>
        </div>
        <div class="slide-image">
          <h1>3</h1>
        </div>
        <div class="slide-image">
          <h1>4</h1>
        </div>
    
        <div class="slide-image">
          <h1>5</h1>
        </div>
    
      </div>
    
    </div>
    <button onclick='goToSlide(0)'>slide 1</button>
    <button onclick='goToSlide(1)'>slide 2</button>
    <button onclick='goToSlide(2)'>slide 3</button>
    <button onclick='goToSlide(3)'>slide 4</button>
    <button onclick='goToSlide(4)'>slide 5</button>
    </div>
    
    <div class="navigation-dots"></div>

    【讨论】:

    • 天哪!你在做什么呀 ?这么多努力。您从零开始编写了整个代码。非常感谢。
    • 不客气。如果有很多时间,我确信有一种更聪明的方法来处理这个问题,但是我使用了以下逻辑:=> 将第一个幻灯片位置与目标位置交换,包括“左”样式 => 清除幻灯片容器 =>使用新的幻灯片设置渲染幻灯片。当用户第一次单击导航按钮时,恢复原始设置,再次注意“左”样式 => 导航到预期的滑动位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2022-11-29
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多