JS实现普通轮播图特效

JS实现普通轮播图特效主要包含以下步骤:

  1. 利用CSS实现轮播图的基本布局,例如轮播图容器和图片容器的样式设置等。需要注意的是,轮播图容器一般为固定宽度,图片容器需要设置为横向排列并且宽度为轮播图容器的n倍(其中n为图片数量)。
.carousel {
  width: 600px; /* 容器宽度为600像素 */
  overflow: hidden; /* 超出部分隐藏 */
}

.carousel .imgContainer {
  display: flex; /* 图片容器横向排列 */
  width: 2400px; /* 图片容器宽度为600×4=2400像素 */
}
  1. 利用JS获取轮播图容器、图片容器和每张图片的宽度。同时,为了实现无缝轮播,需要在图片容器的首尾各复制一次图片,并在滚动到复制的图片时瞬间跳转到相应的原始图片上。
const carouselEl = document.querySelector('.carousel');
const imgContainerEl = document.querySelector('.imgContainer');
const imgWidth = document.querySelector('.imgContainer img').offsetWidth;
imgContainerEl.innerHTML += imgContainerEl.innerHTML; // 在首尾各复制一次图片
let currentIndex = 0; // 当前图片的索引
  1. 实现图片的无缝滚动。每次将图片容器向左滚动一个图片的宽度,并根据当前的索引值更新图片容器的left值。在滚动到复制的图片时,瞬间跳转到相应的原始图片上。
function slide() {
  currentIndex++;
  // 当滚动到复制的图片时,瞬间跳转到相应的原始图片上
  if (currentIndex === imgContainerEl.children.length - 1) {
    currentIndex = 1;
    imgContainerEl.style.left = 0;
  }
  const left = -1 * currentIndex * imgWidth + 'px';
  imgContainerEl.style.left = left;
}

setInterval(slide, 2000); // 每两秒滚动一次
  1. 实现轮播图的自动播放。在定时器中实现图片的滚动,并根据当前的索引值更新图片容器的left值,从而实现轮播图的滚动效果。
function slide() {
  currentIndex++; // 更新当前索引值
  // 当滚动到复制的最后一张图片时,瞬间跳转到相应的第一张原始图片上
  if (currentIndex === imgContainerEl.children.length - 1) {
    currentIndex = 1;
    imgContainerEl.style.left = 0;
  }
  const left = -1 * currentIndex * imgWidth + 'px';
  imgContainerEl.style.left = left;
}

let timer = setInterval(slide, 2000); // 每两秒滚动一次

// 鼠标悬停时停止自动播放
carouselEl.addEventListener('mouseenter', function() {
  clearInterval(timer);
});

// 鼠标离开时恢复自动播放
carouselEl.addEventListener('mouseleave', function() {
  timer = setInterval(slide, 2000);
});

示例1:用JS实现简单的轮播图特效

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>JS实现普通轮播图特效</title>
  <style>
    .carousel {
      width: 600px;
      overflow: hidden;
    }

    .carousel .imgContainer {
      display: flex;
      width: 2400px;
    }

    .carousel .imgContainer img {
      width: 600px;
      height: 300px;
    }
  </style>
</head>

<body>
  <div class="carousel">
    <div class="imgContainer">
      <img src="https://picsum.photos/600/300?random=1">
      <img src="https://picsum.photos/600/300?random=2">
      <img src="https://picsum.photos/600/300?random=3">
      <img src="https://picsum.photos/600/300?random=4">
    </div>
  </div>
  <script>
    const carouselEl = document.querySelector('.carousel');
    const imgContainerEl = document.querySelector('.imgContainer');
    const imgWidth = document.querySelector('.imgContainer img').offsetWidth;
    imgContainerEl.innerHTML += imgContainerEl.innerHTML;
    let currentIndex = 0;

    function slide() {
      currentIndex++;
      if (currentIndex === imgContainerEl.children.length - 1) {
        currentIndex = 1;
        imgContainerEl.style.left = 0;
      }
      const left = -1 * currentIndex * imgWidth + 'px';
      imgContainerEl.style.left = left;
    }

    let timer = setInterval(slide, 2000);

    carouselEl.addEventListener('mouseenter', function() {
      clearInterval(timer);
    });

    carouselEl.addEventListener('mouseleave', function() {
      timer = setInterval(slide, 2000);
    });
  </script>
</body>

</html>

示例2:用JS实现可控制的轮播图特效

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>JS实现普通轮播图特效</title>
  <style>
    .carousel {
      width: 600px;
      overflow: hidden;
      position: relative;
    }

    .carousel .imgContainer {
      display: flex;
      width: 2400px;
    }

    .carousel .imgContainer img {
      width: 600px;
      height: 300px;
    }

    .carousel .prev,
    .carousel .next {
      display: block;
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
      width: 50px;
      height: 50px;
      line-height: 50px;
      text-align: center;
      font-size: 24px;
      color: #fff;
      background-color: rgba(0, 0, 0, 0.5);
      cursor: pointer;
    }

    .carousel .prev {
      left: 0;
    }

    .carousel .next {
      right: 0;
    }
  </style>
</head>

<body>
  <div class="carousel">
    <div class="imgContainer">
      <img src="https://picsum.photos/600/300?random=1">
      <img src="https://picsum.photos/600/300?random=2">
      <img src="https://picsum.photos/600/300?random=3">
      <img src="https://picsum.photos/600/300?random=4">
    </div>
    <span class="prev">&lt;</span>
    <span class="next">&gt;</span>
  </div>
  <script>
    const carouselEl = document.querySelector('.carousel');
    const imgContainerEl = document.querySelector('.imgContainer');
    const imgWidth = document.querySelector('.imgContainer img').offsetWidth;
    imgContainerEl.innerHTML += imgContainerEl.innerHTML;
    let currentIndex = 0;

    function slide() {
      currentIndex++;
      if (currentIndex === imgContainerEl.children.length - 1) {
        currentIndex = 1;
        imgContainerEl.style.left = 0;
      }
      const left = -1 * currentIndex * imgWidth + 'px';
      imgContainerEl.style.left = left;
    }

    let timer = setInterval(slide, 2000);

    carouselEl.addEventListener('mouseenter', function() {
      clearInterval(timer);
    });

    carouselEl.addEventListener('mouseleave', function() {
      timer = setInterval(slide, 2000);
    });

    const prevEl = document.querySelector('.prev');
    const nextEl = document.querySelector('.next');
    prevEl.addEventListener('click', function() {
      clearInterval(timer);
      currentIndex--;
      if (currentIndex === -1) {
        currentIndex = imgContainerEl.children.length - 3;
        imgContainerEl.style.left = -1 * (currentIndex + 1) * imgWidth + 'px';
      }
      const left = -1 * currentIndex * imgWidth + 'px';
      imgContainerEl.style.left = left;
      timer = setInterval(slide, 2000);
    });

    nextEl.addEventListener('click', function() {
      clearInterval(timer);
      slide();
      timer = setInterval(slide, 2000);
    });
  </script>
</body>

</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现普通轮播图特效 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • table-cell完成左侧定宽,右侧定宽及左右定宽等布局的实现方法

    使用table-cell布局是一种简单而强大的网页布局技术,可以实现左侧定宽、右侧定宽以及左右都定宽的布局。以下是实现这些布局的步骤: 左侧定宽,右侧自适应布局 可以通过将左右两个区块设置为表格单元格,并使用CSS的width属性和display属性对区块进行设置。 HTML结构: <div class="container"&gt…

    css 2023年6月10日
    00
  • BootStrap 可编辑表Table格

    让我们来详细讲解一下Bootstrap可编辑表格! Bootstrap可编辑表格 Bootstrap可编辑表格是一种常用的前端组件,它可以让用户在网页上直接进行表格的编辑操作,而无需通过后端来实现。 通过使用Bootstrap可编辑表格,我们可以方便地实现数据的展示和编辑,从而增强网站的用户交互性和数据处理能力。 以下是实现Bootstrap可编辑表格的完整…

    css 2023年6月10日
    00
  • 倾力总结40条常见的移动端Web页面问题解决方案

    针对“倾力总结40条常见的移动端Web页面问题解决方案”的完整攻略,我会从以下几个方面进行详细讲解: 文章题目和简介 文章题目为“倾力总结40条常见的移动端Web页面问题解决方案”,主要介绍了40个常见的移动端Web页面问题的解决方案,涵盖了页面布局、字体显示、图片加载、滚动效果等多方面内容。 文章结构和颜色渐变块 文章采用了层次分明的结构,将40个解决方案…

    css 2023年6月10日
    00
  • jquery实现图片放大镜功能

    下面是详细的“jquery实现图片放大镜功能”的攻略。 准备工作 首先,需要准备一张图片,以及用于展示放大效果的区域。例如,我们可以在HTML中使用以下代码定义一个放大区域: <div class="magnify"></div> 接下来需要引入jQuery库,确保代码正常运行。 实现过程 鼠标移动事件 放大镜的一…

    css 2023年6月10日
    00
  • css实现div内凹角样式的示例代码

    要实现div内凹角的样式,可以通过在样式中设置边框颜色、边框宽度及边框样式,然后用伪元素(:before,:after)做一个覆盖边框的三角形,最后用上z-index和背景颜色或者背景图来完成效果。下面是详细的攻略步骤和示例代码: 步骤一:设置基础样式 首先,在HTML中添加一个div元素,并为其设置样式,包括宽度、高度、背景色、边距和边框等。示例代码如下:…

    css 2023年6月9日
    00
  • 浅谈JS获取元素的N种方法及其动静态讨论

    文章标题:浅谈JS获取元素的N种方法及其动静态讨论 概述 获取元素是前端开发中最常用的操作之一,也是JS语言的一项基本技能。本文将介绍JS获取元素的N种方法及其动、静态讨论。 静态获取元素 1. getElementById 使用document.getElementById(id)方法可以通过id直接获取元素。 <div id="myDiv…

    css 2023年6月10日
    00
  • CSS伪类/伪元素选择器整理

    对于“CSS伪类/伪元素选择器整理”的完整攻略,我会详细讲解以下内容: 一、什么是CSS伪类/伪元素? 在CSS中,伪类和伪元素是两种不同的选择器类型,它们可以在某些特定情况下用来选择HTML中的元素,并应用相应的CSS样式。以下是它们的定义: 伪类:表示一些HTML元素的特定状态,例如:hover(鼠标悬停状态)、:active(执行点击操作时的状态)等。…

    css 2023年6月10日
    00
  • CSS实现隐藏滚动条并可以滚动内容效果(三种方式)

    下面我将详细介绍三种CSS实现隐藏滚动条并可以滚动内容的方法。 方法一:使用 overflow 属性 使用 overflow:hidden 属性可以隐藏滚动条,使用 overflow:auto 属性可以在内容溢出时显示滚动条。这种方法适用于需要隐藏所有滚动条的情况。示例代码如下: .container { overflow: hidden; /* 隐藏滚动条…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部