[JavaScript] Un pequeño caso sencillo sobre cómo implementar un gráfico de carrusel (código completo adjunto)

Primero muestre el efecto real:

La antigua regla, vaya directamente al código:

<!DOCTYPE html>
<html>

<head>
  <style>
    /* CSS样式代码 */

    .slider-container {
      position: relative;
      width: 600px;
      /* 设置轮播图容器宽度 */
      height: 400px;
      /* 设置轮播图容器高度 */
      overflow: hidden;
      /* 隐藏超出容器的部分 */
      margin: 0 auto;
    }

    .slider {
      display: flex;
      transition: transform 0.3s ease-in-out;
      /* 添加过渡效果 */
    }

    .slider-item {
      flex-shrink: 0;
      width: 100%;
      /* 设置每张图片的宽度 */
      height: 100%;
      /* 设置每张图片的高度 */
    }

    .slider-item img {
      width: 100%;
      /* 设置每张图片的宽度 */
      height: 100%;
      /* 设置每张图片的高度 */
    }

    .slider-controls {
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
      display: flex;
      justify-content: space-between;
      align-items: center;
      width: 100%;
      z-index: 1;
      /* 将导航按钮置于轮播图上方 */
    }

    .slider-controls button {
      background-color: #333;
      color: #fff;
      border: none;
      padding: 5px 10px;
      margin: 0 5px;
      cursor: pointer;
    }

    .slider-controls .prev-btn::before,
    .slider-controls .next-btn::after {
      content: "";
      display: inline-block;
      width: 10px;
      height: 10px;
      border-top: 2px solid #fff;
      border-right: 2px solid #fff;
      transform: rotate(45deg);
      margin-right: 5px;
    }

    .slider-controls .prev-btn::before {
      transform: rotate(-135deg);
      margin-right: 0;
      margin-left: 5px;
    }
  </style>
</head>

<body>
  <div class="slider-container">
    <div class="slider">
      <div class="slider-item">
        <img src="./img/1.jpg" alt="Image 1">
      </div>
      <div class="slider-item">
        <img src="./img/2.jpg" alt="Image 2">
      </div>
      <div class="slider-item">
        <img src="./img/3.jpg" alt="Image 3">
      </div>
      <div class="slider-item">
        <img src="./img/4.jpg" alt="Image 4">
      </div>
    </div>
    <div class="slider-controls">
      <button class="prev-btn"></button>
      <button class="next-btn"></button>
    </div>
  </div>

  <script>
    const sliderContainer = document.querySelector('.slider-container');
    const slider = document.querySelector('.slider');
    const prevBtn = document.querySelector('.prev-btn');
    const nextBtn = document.querySelector('.next-btn');

    const slideWidth = document.querySelector('.slider-item').offsetWidth;
    let currentPosition = 0;
    let isPaused = false;

    // 自动轮播
    const autoPlay = () => {
      if (!isPaused) {
        currentPosition -= slideWidth;
        if (currentPosition <= -(slideWidth * (slider.children.length - 1))) {
          currentPosition = 0;
        }
        slider.style.transform = `translateX(${currentPosition}px)`;
      }
      setTimeout(autoPlay, 2000);
    };

    // 鼠标悬停/离开事件监听器
    sliderContainer.addEventListener('mouseenter', () => {
      isPaused = true;
    });

    sliderContainer.addEventListener('mouseleave', () => {
      isPaused = false;
    });

    // 上一页按钮点击事件监听器
    prevBtn.addEventListener('click', () => {
      currentPosition += slideWidth;
      if (currentPosition > 0) {
        currentPosition = -(slideWidth * (slider.children.length-1));
      }
      slider.style.transform = `translateX(${currentPosition}px)`;
    });

    // 下一页按钮点击事件监听器
    nextBtn.addEventListener('click', () => {
      currentPosition -= slideWidth;
      if (currentPosition <= -(slideWidth * (slider.children.length))) {
        currentPosition = 0;
      }
      slider.style.transform = `translateX(${currentPosition}px)`;
    });

    // 启动自动轮播
    autoPlay();
  </script>
</body>

</html>

Este código implementa una función de carrusel simple. Las funciones específicas son las siguientes:

1. Función de carrusel automático: utilice la función `autoPlay()` para lograr el efecto de cambiar automáticamente las imágenes. La función primero verifica el valor de la variable `isPaused`. Si es `false`, lo que significa que no hay pausa, entonces `currentPosition` se resta del ancho de la imagen. Luego verifique si se ha alcanzado la última imagen y, de ser así, restablezca `currentPosition` a 0 para lograr un efecto de reproducción en bucle. Finalmente, al configurar el atributo `transform` del contenedor de imágenes del carrusel, use la función `translateX()` para lograr el efecto de animación de traducción de la imagen. Luego use el método `setTimeout()` para llamar a la función `autoPlay()` en un bucle cronometrado para implementar la función de reproducción automática.

    // 自动轮播
    const autoPlay = () => {
      if (!isPaused) {
        currentPosition -= slideWidth;
        if (currentPosition <= -(slideWidth * (slider.children.length - 1))) {
          currentPosition = 0;
        }
        slider.style.transform = `translateX(${currentPosition}px)`;
      }
      setTimeout(autoPlay, 2000);
    };

2. Función de pasar el mouse sobre/salir del evento: Al usar el método `addEventListener()`, los detectores de eventos `mouseenter` y `mouseleave` se agregan al contenedor del carrusel. Cuando el mouse ingresa al contenedor, establezca la variable `isPaused` en `true`, lo que significa pausar el carrusel automático. Cuando el mouse salga del contenedor, establezca la variable `isPaused` en `false` para reanudar el carrusel automático.

    // 鼠标悬停/离开事件监听器
    sliderContainer.addEventListener('mouseenter', () => {
      isPaused = true;
    });

    sliderContainer.addEventListener('mouseleave', () => {
      isPaused = false;
    });

3. Función de evento de clic en el botón de la página anterior: al utilizar el método `addEventListener()`, se agrega un detector de eventos `click` al botón de la página anterior. Cuando se hace clic en el botón, aumente `currentPosition` por el ancho de la imagen. Luego verifique si se ha alcanzado la primera imagen. Si es así, configure `currentPosition` en la posición de la última imagen para lograr un efecto de cambio de bucle. Finalmente, al configurar el atributo `transform` del contenedor de imágenes del carrusel, use la función `translateX()` para lograr el efecto de animación de traducción de la imagen.

    // 上一页按钮点击事件监听器
    prevBtn.addEventListener('click', () => {
      currentPosition += slideWidth;
      if (currentPosition > 0) {
        currentPosition = -(slideWidth * (slider.children.length-1));
      }
      slider.style.transform = `translateX(${currentPosition}px)`;
    });

4. Función de evento de clic en el botón de la página siguiente: al utilizar el método `addEventListener()`, se agrega un detector de eventos `click` al botón de la página siguiente. Cuando se hace clic en el botón, `currentPosition` se resta del ancho de la imagen. Luego verifique si se ha alcanzado la última imagen y, de ser así, restablezca `currentPosition` a 0 para lograr un efecto de cambio de bucle. Finalmente, al configurar el atributo `transform` del contenedor de imágenes del carrusel, use la función `translateX()` para lograr el efecto de animación de traducción de la imagen.

    // 下一页按钮点击事件监听器
    nextBtn.addEventListener('click', () => {
      currentPosition -= slideWidth;
      if (currentPosition <= -(slideWidth * (slider.children.length))) {
        currentPosition = 0;
      }
      slider.style.transform = `translateX(${currentPosition}px)`;
    });

Si lo encuentras útil, por favor dale me gusta TAT

Supongo que te gusta

Origin blog.csdn.net/zhangawei123/article/details/130916262
Recomendado
Clasificación