如何使用JavaScript实现无缝滚动自动播放轮播图效果

以下是使用JavaScript实现无缝滚动自动播放轮播图效果的攻略:

步骤一:准备轮播图的HTML和CSS样式

首先,在HTML中创建轮播图的容器,并添加每张图片和对应的导航点,例如:

<div class="slider-container">
  <div class="slider-wrapper">
    <img src="img/slide1.jpg" alt="slide1">
    <img src="img/slide2.jpg" alt="slide2">
    <img src="img/slide3.jpg" alt="slide3">
    <img src="img/slide4.jpg" alt="slide4">
  </div>
  <ul class="slider-nav">
    <li class="active"></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
</div>

然后,为轮播图的容器和图片、导航点设置CSS样式,例如:

.slider-container {
  position: relative;
  width: 100%;
  height: 400px;
  overflow: hidden;
}

.slider-wrapper {
  display: flex;
  width: 400%;
  transform: translateX(0);
  transition: transform 0.5s ease-in-out;
}

.slider-wrapper img {
  width: 25%;
  height: 100%;
}

.slider-nav {
  position: absolute;
  bottom: 20px;
  left: 50%;
  transform: translateX(-50%);
  list-style: none;
  padding: 0;
  margin: 0;
}

.slider-nav li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 0 10px;
  background-color: #ccc;
  border-radius: 50%;
  cursor: pointer;
}

.slider-nav li.active {
  background-color: #fff;
}

通过以上样式设置,实现了轮播图的容器宽度为100%、高度为400px,同时隐藏了超出容器大小的图片。而轮播图的内容则使用flex布局横向排列,相邻图片之间的间距通过设置图片的宽度为25%来实现。此外,导航点的样式和位置也做了调整。

步骤二:设置轮播图的自动播放

在JS中,可以使用定时器和CSS的transform属性来实现轮播图的自动播放。具体代码如下:

const wrapper = document.querySelector('.slider-wrapper');
const nav = document.querySelectorAll('.slider-nav li');
let currentSlide = 0;
let interval;

function startSlide() {
  interval = setInterval(() => {
    goToSlide(currentSlide + 1);
  }, 3000);
}

function pauseSlide() {
  clearInterval(interval);
}

function goToSlide(n) {
  wrapper.style.transform = `translateX(-${n * 25}%)`;
  nav[currentSlide].classList.remove('active');
  nav[n].classList.add('active');
  currentSlide = n;
}

nav.forEach((item, index) => {
  item.addEventListener('click', () => {
    pauseSlide();
    goToSlide(index);
  });
});

wrapper.addEventListener('mouseover', pauseSlide);
wrapper.addEventListener('mouseout', startSlide);

startSlide();

在上面的代码中,首先获取轮播图容器和导航点的DOM元素,然后定义一个变量currentSlide用于记录当前显示的图片。接着,定义三个函数startSlide()pauseSlide()goToSlide(n)。其中startSlide()函数使用setInterval()方法每隔3秒调用一次goToSlide()函数,实现自动播放效果;pauseSlide()函数使用clearInterval()方法停止轮播图的自动播放;goToSlide(n)函数则通过设置CSS的transform属性和修改导航点的样式来切换当前显示的图片。

在设置自动播放之前需要为每个导航点添加click事件监听器,利用pauseSlide()方法暂停自动轮播,并通过goToSlide()方法实现导航点的点击切换图片效果。同时将底层容器的mouseovermouseout事件分别绑定到pauseSlide()startSlide()方法上,实现鼠标悬停轮播暂停的效果。

步骤三:实现轮播图的无缝滚动

轮播图的无缝滚动可以通过在图片列表的前后各添加一张与列表相反的图片来实现。例如,对于四张图片的轮播图,图片列表应该是这样的:

slide4, slide1, slide2, slide3, slide4, slide1

其中,前两张图片slide4slide1与最后两张图片slide4slide1是相同的,这样就可以实现无缝滚动的效果。具体实现可参考以下代码:

<div class="slider-container">
  <div class="slider-wrapper">
    <img src="img/slide4.jpg" alt="slide4">
    <img src="img/slide1.jpg" alt="slide1">
    <img src="img/slide2.jpg" alt="slide2">
    <img src="img/slide3.jpg" alt="slide3">
    <img src="img/slide4.jpg" alt="slide4">
    <img src="img/slide1.jpg" alt="slide1">
  </div>
  <ul class="slider-nav">
    <li class="active"></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
</div>
const slider = document.querySelector('.slider-wrapper');
const slides = document.querySelectorAll('.slider-wrapper img');
const sliderWidth = document.querySelector('.slider-container').offsetWidth;
let currentSlide = 1;

function positionSlides() {
  for (let i = 0; i < slides.length; i++) {
    slides[i].style.left = (i * sliderWidth) + 'px';
  }
  slider.style.transform = `translateX(-${sliderWidth}px)`;
}

positionSlides(); // 初始位置

function goToSlide(n) {
  slider.style.transform = `translateX(-${n * sliderWidth}px)`;
  currentSlide = n;
}

function nextSlide() {
  if (currentSlide === slides.length - 2) {
    slider.style.transition = 'none';
    currentSlide = 1;
    slider.style.transform = `translateX(-${currentSlide * sliderWidth}px)`;
  } else {
    currentSlide++;
    slider.style.transform = `translateX(-${currentSlide * sliderWidth}px)`;
  }
}

function prevSlide() {
  if (currentSlide === 1) {
    slider.style.transition = 'none';
    currentSlide = slides.length - 2;
    slider.style.transform = `translateX(-${currentSlide * sliderWidth}px)`;
  } else {
    currentSlide--;
    slider.style.transform = `translateX(-${currentSlide * sliderWidth}px)`;
  }
}

let interval = setInterval(nextSlide, 3000);

上面的代码基本上和之前的代码类似,不同的是添加了两个函数nextSlide()prevSlide()用于切换前后图片。当切换到最后一张图片时,将跳转到第一张图片,同时取消过渡效果。当切换到第一张图片时,将跳转到最后一张图片,并取消过渡效果。此外,在初始化时调用了positionSlides()函数来设置图片的初始位置。

示例1:在线演示代码

示例2:在线演示代码

以上就是使用JavaScript实现无缝滚动自动播放轮播图效果的完整攻略。由于该效果依赖于CSS3的transition和transform属性,因此在兼容性上需要注意。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用JavaScript实现无缝滚动自动播放轮播图效果 - Python技术站

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

相关文章

  • IE8 下的Js错误HTML Parsing Error…

    问题描述: 在 IE8 浏览器中,出现 Js 报错信息 “HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)” 该错误在其他 IE 版本中可能也会出现。 解决方案: 此类问题一般是 HTM…

    JavaScript 2023年5月28日
    00
  • JS实现简单的浮动碰撞效果示例

    下面是详细讲解“JS实现简单的浮动碰撞效果示例”的完整攻略。 理解浮动碰撞效果 浮动碰撞效果指的是在页面上移动多个物体时,当这些物体碰撞到一起时会发生特定的效果。JS可以通过获取物体的位置、速度、加速度等信息,计算两个物体碰撞的时间、位置等信息,然后通过改变物体的位置、速度等属性,实现物体的碰撞效果。 实现步骤 创建HTML页面 首先,需要在HTML页面上创…

    JavaScript 2023年6月11日
    00
  • JS对象与JSON格式数据相互转换

    JS对象与JSON格式数据相互转换是Web开发中非常常见的任务。在以下的攻略中,我提供两种基本的方法帮助你完成这个任务。其中一种使用JavaScript的内置函数,另一种使用第三方库。 1. 使用JavaScript内置函数方法转换 JavaScript提供了两个内置函数 JSON.stringify() 和 JSON.parse() 分别用于将JS对象转换…

    JavaScript 2023年5月27日
    00
  • js 日期字符串截取分割成单个具体的日期(2009-12-30 13:28:29)

    想要将JS日期字符串截取、分割成单个具体的日期,我们可以使用字符串的截取、分割函数以及JS内置的日期对象。 具体流程如下: 首先,将日期字符串作为参数传递给JS内置的Date()构造函数,将其转换成日期对象。日期字符串格式必须为:yyyy-mm-dd hh:mm:ss,否则将会抛出错误。 let dateString = "2009-12-30 1…

    JavaScript 2023年5月27日
    00
  • js字符串类型String常用操作实例总结

    JavaScript字符串类型String常用操作实例总结 JavaScript中字符串类型String是一种常用的数据类型,在日常的开发中经常被使用到。本文将对JavaScript中String类型的常用操作进行总结,并提供一些示例来加深理解。 字符串的创建 在JavaScript中,可以使用一对单引号或双引号来创建字符串,例如: let str1 = ‘…

    JavaScript 2023年5月28日
    00
  • Document.location.href和.replace的区别示例介绍

    Document.location.href和.replace是JavaScript中经常用到的两个方法,它们的作用都是跳转页面,但其实存在着一些区别。接下来我将详细讲解这两个方法的区别,并且分别给出两个示例来说明。 Document.location.href和.replace的区别 Document.location.href 使用Document.lo…

    JavaScript 2023年6月11日
    00
  • js向上无缝滚动,网站公告效果 具体代码

    下面我将详细讲解如何实现JavaScript向上无缝滚动网站公告效果,包括代码实现和调试过程。 1. 准备工作 在开始实现之前,需要先准备好一些基本的HTML和CSS代码。首先创建一个包含公告内容的DIV,将其设置为固定高度,并添加必要的样式,使其看起来更加美观。 <div class="notice"> <ul>…

    JavaScript 2023年6月11日
    00
  • JS显示日历和天气的方法

    下面是JS显示日历和天气的方法的完整攻略。 显示日历 通过 JavaScript 可以在网页上添加一个简单的日历。可以使用 JavaScript 创建一个动态日历,该日历能够: 显示当前的日期,以便用户可以了解今天是哪一天。 显示当前月份的日历,以便用户可以在网站上浏览日历,并获得其他有关当前月份的信息。 HTML代码 为了创建一个简单的日历,我们需要至少创…

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