js实现轮播图效果 纯js实现图片自动切换

下面我将为您详细讲解如何使用纯js实现轮播图效果,并提供两个示例。

轮播图效果的实现

核心思路

实现轮播图效果,主要的核心思路是使用定时器(setInterval)对图片进行自动切换,并且在用户触发左右切换按钮时进行图片的手动切换。

具体来说,实现图片的自动切换需要以下步骤:

  1. 获取图片容器和图片列表的宽度、当前图片的索引
  2. 使用定时器不断地切换图片,每隔一定的时间,将图片列表向左偏移一个图片的宽度,同时将当前图片的索引加1
  3. 当当前图片的索引大于等于图片列表的长度时,将图片列表设置为初始状态,将当前图片的索引置为0

实现图片的手动切换需要以下步骤:

  1. 给左右切换按钮添加点击事件监听器
  2. 在事件监听器中根据点击按钮的不同,调整当前图片索引的值
  3. 利用当前索引的值重新计算图片列表的偏移量并实现偏移

示例1:基本轮播图实现

下面提供一个基本的轮播图实现示例。这个轮播图包含两个按钮,即左右切换按钮,同时可以自动轮播。在轮播期间,用户可以通过点击左右切换按钮实现图片的手动切换。

HTML 代码:

<div class="slider">
  <ul class="slider__list">
    <li class="slider__item"><img src="img/01.jpg" alt=""></li>
    <li class="slider__item"><img src="img/02.jpg" alt=""></li>
    <li class="slider__item"><img src="img/03.jpg" alt=""></li>
    <li class="slider__item"><img src="img/04.jpg" alt=""></li>
    <li class="slider__item"><img src="img/05.jpg" alt=""></li>
  </ul>
  <button class="slider__btn slider__btn--prev">上一张</button>
  <button class="slider__btn slider__btn--next">下一张</button>
</div>

CSS 代码:

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

.slider__list {
  position: absolute;
  top: 0;
  left: 0;
  width: 2000px;
  height: 300px;
  margin: 0;
  padding: 0;
  transition: all 500ms ease;
}

.slider__item {
  position: relative;
  float: left;
  width: 400px;
  height: 300px;
  list-style: none;
}

JS 代码:

// 获取相关元素
const slider = document.querySelector('.slider');
const sliderList = slider.querySelector('.slider__list');
const sliderItem = slider.querySelectorAll('.slider__item');
const sliderBtnPrev = slider.querySelector('.slider__btn--prev');
const sliderBtnNext = slider.querySelector('.slider__btn--next');

// 轮播图参数设置
const imgWidth = sliderItem[0].offsetWidth; // 图片宽度
let currentImgIndex = 0; // 当前显示的图片索引
let timerId = null; // 定时器id

// 启动轮播
function startSlider() {
  timerId = setInterval(() => {
    currentImgIndex++;
    if (currentImgIndex >= sliderItem.length) {
      currentImgIndex = 0;
    }
    const offset = -currentImgIndex * imgWidth;
    sliderList.style.transform = `translateX(${offset}px)`;
  }, 3000);
}

// 停止轮播
function stopSlider() {
  clearInterval(timerId);
}

// 注册事件监听器
slider.addEventListener('mouseover', stopSlider);
slider.addEventListener('mouseout', startSlider);

sliderBtnPrev.addEventListener('click', () => {
  currentImgIndex--;
  if (currentImgIndex < 0) {
    currentImgIndex = sliderItem.length - 1;
  }
  const offset = -currentImgIndex * imgWidth;
  sliderList.style.transform = `translateX(${offset}px)`;
});

sliderBtnNext.addEventListener('click', () => {
  currentImgIndex++;
  if (currentImgIndex >= sliderItem.length) {
    currentImgIndex = 0;
  }
  const offset = -currentImgIndex * imgWidth;
  sliderList.style.transform = `translateX(${offset}px)`;
});

startSlider();

以上代码中,startSlider 函数用于启动轮播定时器,stopSlider 函数用于停止定时器。使用事件监听器在鼠标移入、移出时启动/停止轮播。在左右按钮的点击事件监听器中,根据点击不同的按钮调整当前图片的索引,并计算新的偏移量。

示例2:带自动滑动缓动的轮播图实现

下面提供一个带有自动滑动缓动效果的实现示例。在这个示例中,轮播图的移动不是突兀的,而是带有一定的滑动缓动效果。除此之外,这个轮播图和上一个示例基本相同。

HTML 代码:

<div class="slider">
  <ul class="slider__list">
    <li class="slider__item"><img src="img/01.jpg" alt=""></li>
    <li class="slider__item"><img src="img/02.jpg" alt=""></li>
    <li class="slider__item"><img src="img/03.jpg" alt=""></li>
    <li class="slider__item"><img src="img/04.jpg" alt=""></li>
    <li class="slider__item"><img src="img/05.jpg" alt=""></li>
  </ul>
  <button class="slider__btn slider__btn--prev">上一张</button>
  <button class="slider__btn slider__btn--next">下一张</button>
</div>

CSS 代码:

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

.slider__list {
  position: absolute;
  top: 0;
  left: 0;
  width: 2000px;
  height: 300px;
  margin: 0;
  padding: 0;
  transition: all 0.5s ease-out;
}

.slider__item {
  position: relative;
  float: left;
  width: 400px;
  height: 300px;
  list-style: none;
}

JS 代码:

// 获取相关元素
const slider = document.querySelector('.slider');
const sliderList = slider.querySelector('.slider__list');
const sliderItem = slider.querySelectorAll('.slider__item');
const sliderBtnPrev = slider.querySelector('.slider__btn--prev');
const sliderBtnNext = slider.querySelector('.slider__btn--next');

// 启动轮播
const imgWidth = sliderItem[0].offsetWidth; // 图片宽度
let currentImgIndex = 0; // 当前显示的图片索引
let timerId = null; // 定时器id

function slide() {
  currentImgIndex++;
  if (currentImgIndex >= sliderItem.length) {
    currentImgIndex = 0;
  }
  const offset = -currentImgIndex * imgWidth;
  sliderList.style.transform = `translateX(${offset}px)`;
}

function startSlider() {
  timerId = setInterval(() => {
    slide();
    sliderList.style.transition = 'all 0.5s ease-out';
  }, 3000);
}

// 停止轮播
function stopSlider() {
  clearInterval(timerId);
}

// 注册事件监听器
slider.addEventListener('mouseover', stopSlider);
slider.addEventListener('mouseout', () => {
  startSlider();
  sliderList.style.transition = 'none';
});

sliderBtnPrev.addEventListener('click', () => {
  currentImgIndex--;
  if (currentImgIndex < 0) {
    currentImgIndex = sliderItem.length - 1;
  }
  const offset = -currentImgIndex * imgWidth;
  sliderList.style.transform = `translateX(${offset}px)`;
  sliderList.style.transition = 'all 0.5s ease-out';
});

sliderBtnNext.addEventListener('click', () => {
  slide();
  sliderList.style.transition = 'all 0.5s ease-out';
});

startSlider();

以上代码中,slide 函数用于实现图片的自动切换。在启动定时器时,除了执行 slide 函数外,还将轮播图容器的 transition 属性设为缓动效果。在鼠标移出时,将 transition 属性设为 none,这样轮播图就可以在切换时没有缓动效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现轮播图效果 纯js实现图片自动切换 - Python技术站

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

相关文章

  • javascript中日期转换成时间戳的小例子

    JavaScript的日期对象提供了各种操作日期和时间的方法。在JavaScript中将日期转换成时间戳(以毫秒为单位)非常简单,只需要用Date对象的getTime()方法即可。以下是用JavaScript将日期转换为时间戳的小例子: const date = new Date(‘2021-08-01’); const timeStamp = date.g…

    JavaScript 2023年5月27日
    00
  • JavaScript利用Date实现简单的倒计时实例

    下面是JavaScript利用Date实现简单的倒计时的完整攻略: 步骤一:HTML结构 首先,我们需要一个HTML结构,来描述我们这个倒计时的样式和结构。示例代码如下: <div class="countdown"> <div class="countdown__item"> <span…

    JavaScript 2023年5月27日
    00
  • JS 加入收藏夹的代码(主流浏览器通用)

    这里提到的“JS 加入收藏夹的代码(主流浏览器通用)”是指使用JavaScript代码实现将当前网页添加到收藏夹中的功能,下面是详细讲解完整攻略: 步骤一:创建添加收藏夹的代码段 我们可以使用Javascript创建一个函数,将当前网页添加到收藏夹,并返回true或false来表示是否添加成功。下面是一个示例代码: function addFavorite(…

    JavaScript 2023年5月27日
    00
  • JavaScript阻止事件冒泡示例分享

    关于“JavaScript阻止事件冒泡示例分享”的完整攻略,我将从以下两个方面进行详细讲解。 1. 什么是事件冒泡 在讲解如何阻止事件冒泡之前,我们需要先了解一下什么是事件冒泡。 事件冒泡是浏览器处理事件的一种机制,即当后代元素触发事件时,该事件会一层层地向上级元素(父级元素)传递,直到最终传递到文档对象,也就是最顶级的元素。 2. 如何阻止事件冒泡 通常来…

    JavaScript 2023年6月10日
    00
  • JavaScript中Dom操作实例详解

    JavaScript中Dom操作实例详解 什么是Dom Dom,即Document Object Model,指的是文档对象模型。 它是一个用于HTML和XML文档的编程接口,可以改变或者操作文档的内容、结构和样式。 通过Dom,我们可以像操作HTML页面一样,动态地修改页面上的内容和样式,实现网页的交互和动态效果。 Dom元素的选取 通过Dom元素的选取,…

    JavaScript 2023年6月10日
    00
  • js 浏览本地文件夹系统示例代码

    下面是详细讲解 “JS 浏览本地文件夹系统示例代码” 的攻略: 1. 背景 在前端开发中,有时需要让用户选择本地文件并进行相关处理。这时就需要使用 JS 实现浏览本地文件夹的功能,以便实现文件的上传或处理等操作。 在实现这个功能时,我们需要借助 HTML5 File API。File API 通过 input 表单元素中的 file 类型来提供用户文件选择操…

    JavaScript 2023年5月27日
    00
  • js拆分字符串并将分割的数据放到数组中的方法

    首先,用JavaScript拆分字符串并将分割的数据放到数组中可以使用split()方法。该方法基于指定分隔符将字符串分割为子字符串,并将这些子字符串存储在数组中。以下是该方法的基本语法: string.split(separator, limit) 其中,separator是用于分割的字符串或正则表达式,limit是一个可选的整数参数,用于指定返回的子字符…

    JavaScript 2023年5月28日
    00
  • 原生JS实现匀速图片轮播动画

    下面我就详细讲解“原生JS实现匀速图片轮播动画”的完整攻略: 一、概述 图片轮播动画是网页设计中常用的效果,它能够增加页面的美感,并且能够呈现多个图片,帮助用户更好的了解网站的内容。本攻略将介绍如何使用原生JS实现匀速图片轮播动画。 二、实现步骤 1. HTML结构 首先,在HTML中需要创建一个容器,用于存储图片和轮播进度条。HTML结构如下: <d…

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