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日

相关文章

  • 浅谈regExp的test方法取得的值变化的原因及处理方法

    下面是“浅谈regExp的test方法取得的值变化的原因及处理方法”的完整攻略: 什么是regExp的test方法 RegExp是JavaScript中的正则表达式对象,test()是它的一个方法,用于测试一个字符串是否符合某个正则表达式的匹配规则。test()方法返回一个布尔值,如果符合规则则返回true,否则返回false。 let str = ‘abc…

    JavaScript 2023年6月10日
    00
  • 如何在JS中实现相互转换XML和JSON

    以下是如何在JS中实现相互转换XML和JSON的完整攻略: 将XML转换为JSON格式 在JS中,将XML格式的数据转换为JSON格式的数据,可以使用第三方库:xml2json。该库可以通过npm进行安装: npm install xml2json –save 安装完成后,就可以在JS代码中使用该库进行XML和JSON格式的转换了。下面是一个使用xml2j…

    JavaScript 2023年5月27日
    00
  • Javascript 获取滚动条位置等信息的函数

    JavaScript 获取滚动条位置等信息的函数可以帮助我们在开发网页时,实现各种复杂的滚动效果。下面,我将为大家详细讲解相关函数的使用方法和示例演示。 获取滚动条位置的函数:scrollY scrollY 函数是用于获取文档的垂直滚动距离的函数。其用法如下: var scrollPos = window.scrollY; 其中,window 是指当前窗口,…

    JavaScript 2023年6月11日
    00
  • javascript中json对象json数组json字符串互转及取值方法

    下面是“JavaScript中JSON对象、JSON数组、JSON字符串互转及取值方法”的完整攻略: 1. JSON对象 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,其数据格式和JavaScript对象的格式类似。在JavaScript中,可以通过JSON对象来解析JSON字符串,也可以将JavaScript对…

    JavaScript 2023年5月27日
    00
  • JavaScript面试中常考的字符串操作方法大全(包含ES6)

    JavaScript面试中常考的字符串操作方法大全(包含ES6) 1. 字符串长度 获取字符串长度可以使用length属性,例如: const str = ‘Hello World’; console.log(str.length); // 11 2. 字符串索引 可以使用方括号([])来访问字符串中的单个字符,例如: const str = ‘Hello …

    JavaScript 2023年5月28日
    00
  • javascript实现回到顶部特效

    当页面内容比较长时,用户需要不断地向下滚动页面才能浏览全部内容,但有时候用户想快速回到页面顶部,此时,通过JavaScript实现回到顶部特效便能提高用户的使用体验。 下面是“JavaScript实现回到顶部特效”的完整攻略。 一、获取页面滚动高度 使用window.scrollY属性或window.pageYOffset属性可以获取文档当前的纵向滚动距离。…

    JavaScript 2023年6月11日
    00
  • Javascript Date getMilliseconds() 方法

    以下是关于JavaScript Date对象的getMilliseconds()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的getMilliseconds()方法 JavaScript Date对象的getMilliseconds()方法返回一个毫秒的数字(0-999)。该方法可用获取当前日期的毫秒数。 下使用Date的getMi…

    JavaScript 2023年5月11日
    00
  • 页面只能打开一次Cooike如何实现

    实现页面只能打开一次 Cookie 的方法可以通过在用户访问首次打开页面时,设置一个标记位cookie,如果后续用户再次访问相同的页面,判断是否存在该标记位。 下面给出两条示例来说明如何实现: 示例一:使用JavaScript和Cookie实现页面只能打开一次 JavaScript中可以使用 document.cookie 来获取、设置、删除cookie。我…

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