原生js实现无限循环轮播图效果

原生JS实现无限循环轮播图的步骤如下:

  1. 定义样式和HTML结构

先定义轮播图的样式和HTML结构,可以用一个ul包含多个li标签,每个li标签里放置一张图片。

<div>
  <ul class="slider">
    <li><img src="image1.jpg" alt=""></li>
    <li><img src="image2.jpg" alt=""></li>
    <li><img src="image3.jpg" alt=""></li>
    <li><img src="image4.jpg" alt=""></li>
  </ul>
 </div>
div {
  width: 500px;
  height: 300px;
  overflow: hidden;
}

.slider {
  list-style: none;
  margin: 0;
  padding: 0;
  position: relative;
  width: 200%;
  height: 300px;
  left: 0;
  transition: left 0.5s;
}

.slider li {
  float: left;
  width: 50%;
  height: 300px;
  display: inline-block;
}
  1. 实现自动轮播效果

使用定时器实现自动轮播效果,先准备好一个计数器变量和一个自动轮播函数autoPlay(),在该函数里设置让计数器加1并移动ul标签的left值到一个新的位置,使得当前图片离开视野,下一张图片进入视野。当计数器超过图片数量时,将计数器重置为1,再从头循环播放。

var slider = document.querySelector('.slider');
var count = 1;

function autoPlay() {
  count++;
  slider.style.left = '-' + count*50 + '%';
  if (count >= slider.children.length - 1) {
    count = 1;
    slider.style.left = '-' + count*50 + '%';
  }
}

setInterval(autoPlay, 3000);
  1. 实现点击箭头切换图片

可以给左右箭头绑定点击事件,使得每次点击会移动到下一张或上一张图片。需要注意的是,在移动到最后一张或第一张图片时,要进行特殊处理,跳转到对应的位置。

var prevBtn = document.querySelector('#prevBtn');
var nextBtn = document.querySelector('#nextBtn');

prevBtn.addEventListener('click', function() {
  count--;
  if (count < 1) {
    count = slider.children.length - 2;
    slider.style.left = '-' + count*50 + '%';
  } else {
    slider.style.left = '-' + count*50 + '%';
  }
});

nextBtn.addEventListener('click', function() {
  count++;
  if (count >= slider.children.length - 1) {
    count = 1;
    slider.style.left = '-' + count*50 + '%';
  } else {
    slider.style.left = '-' + count*50 + '%';
  }
});

以上就是使用原生JS实现无限循环轮播图的完整攻略。

以下放两个示例说明:

示例1

演示页面:https://codepen.io/lulubao123/pen/MWJyrPR

代码片段:

<div>
  <ul class="slider">
    <li><img src="https://via.placeholder.com/500x300/afafaf/ffffff" alt=""></li>
    <li><img src="https://via.placeholder.com/500x300/8f8f8f/ffffff" alt=""></li>
    <li><img src="https://via.placeholder.com/500x300/6f6f6f/ffffff" alt=""></li>
    <li><img src="https://via.placeholder.com/500x300/4f4f4f/ffffff" alt=""></li>
    <li><img src="https://via.placeholder.com/500x300/2f2f2f/ffffff" alt=""></li>
  </ul>
  <button id="prevBtn"><</button>
  <button id="nextBtn">></button>
</div>
div {
  width: 500px;
  height: 300px;
  overflow: hidden;
  position: relative;
}

.slider {
  list-style: none;
  margin: 0;
  padding: 0;
  position: relative;
  width: 500%;
  height: 300px;
  left: 0;
  transition: left 0.5s;
}

.slider li {
  float: left;
  width: 20%;
  height: 300px;
  display: inline-block;
}

button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: transparent;
  border: none;
  font-size: 2em;
  color: #ffffff;
  cursor: pointer;
  padding: 0.5em;
}

#prevBtn {
  left: 1em;
}

#nextBtn {
  right: 1em;
}
var slider = document.querySelector('.slider');
var prevBtn = document.querySelector('#prevBtn');
var nextBtn = document.querySelector('#nextBtn');
var count = 1;

function autoPlay() {
  count++;
  slider.style.left = '-' + count*20 + '%';
  if (count >= slider.children.length - 1) {
    count = 1;
    slider.style.left = '-' + count*20 + '%';
  }
}

setInterval(autoPlay, 2000);

prevBtn.addEventListener('click', function() {
  count--;
  if (count < 1) {
    count = slider.children.length - 2;
    slider.style.left = '-' + count*20 + '%';
  } else {
    slider.style.left = '-' + count*20 + '%';
  }
});

nextBtn.addEventListener('click', function() {
  count++;
  if (count >= slider.children.length - 1) {
    count = 1;
    slider.style.left = '-' + count*20 + '%';
  } else {
    slider.style.left = '-' + count*20 + '%';
  }
});

示例2

演示页面:https://codepen.io/lulubao123/pen/vYLyyMB

代码片段:

<div>
  <ul class="slider">
    <li><img src="https://via.placeholder.com/600x400/afafaf/ffffff" alt=""></li>
    <li><img src="https://via.placeholder.com/600x400/8f8f8f/ffffff" alt=""></li>
    <li><img src="https://via.placeholder.com/600x400/6f6f6f/ffffff" alt=""></li>
    <li><img src="https://via.placeholder.com/600x400/4f4f4f/ffffff" alt=""></li>
  </ul>
  <button id="prevBtn"><</button>
  <button id="nextBtn">></button>
</div>
div {
  width: 600px;
  height: 400px;
  overflow: hidden;
  position: relative;
}

.slider {
  list-style: none;
  margin: 0;
  padding: 0;
  position: relative;
  width: 400%;
  height: 400px;
  left: 0;
  transition: left 0.5s;
}

.slider li {
  float: left;
  width: 25%;
  height: 400px;
  display: inline-block;
}

.slider li img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background: transparent;
  border: none;
  font-size: 2em;
  color: #ffffff;
  cursor: pointer;
  padding: 0.5em;
}

#prevBtn {
  left: 1em;
}

#nextBtn {
  right: 1em;
}
var slider = document.querySelector('.slider');
var prevBtn = document.querySelector('#prevBtn');
var nextBtn = document.querySelector('#nextBtn');
var count = 1;

function autoPlay() {
  count++;
  slider.style.left = '-' + count*25 + '%';
  if (count >= slider.children.length - 1) {
    count = 1;
    slider.style.left = '-' + count*25 + '%';
  }
}

setInterval(autoPlay, 2500);

prevBtn.addEventListener('click', function() {
  count--;
  if (count < 1) {
    count = slider.children.length - 2;
    slider.style.left = '-' + count*25 + '%';
  } else {
    slider.style.left = '-' + count*25 + '%';
  }
});

nextBtn.addEventListener('click', function() {
  count++;
  if (count >= slider.children.length - 1) {
    count = 1;
    slider.style.left = '-' + count*25 + '%';
  } else {
    slider.style.left = '-' + count*25 + '%';
  }
});

以上是两个简单的示例,你可以根据需要进行修改和调整,实现更为丰富和复杂的轮播效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现无限循环轮播图效果 - Python技术站

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

相关文章

  • cesium-2-entity

    1、四层结构 viewer –> datasources(DataSourceCollection类型) –> datasource –> entities(EntityCollection类型) –> entity 需要学习的方向是:只需要注意每个层与层之间的关系和entity实例如何创建即可 2、DataSourceCol…

    JavaScript 2023年4月27日
    00
  • 突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)

    本文将为大家讲解Javascript API扩展5中的其他扩展,包括应用缓存、服务端消息以及桌面通知,并进行详细的解释和示例说明。 应用缓存 应用缓存是一种使得Web应用能够离线运行的技术,它可以将一个Web应用及其资源文件缓存到本地,从而在用户离线时也能够访问应用。 使用应用缓存需要使用如下代码: <!DOCTYPE html> <htm…

    JavaScript 2023年5月27日
    00
  • 【学习笔记】JS

    JS JS教程 HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 简介 1、什么是JS? JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。 2、JS有哪些作用? 直接写入 HTML 输出流…

    JavaScript 2023年4月17日
    00
  • 果断收藏9个Javascript代码高亮脚本

    收藏Javascript代码高亮脚本的完整攻略 1. 搜索Github Github上有很多Javascript代码高亮插件,可以通过搜索Github来找到适合自己项目的插件。在Github的搜索框中输入”javascript highlight”,即可得到相关插件。 示例:Search Github Code Highlight 1. 打开Github网站…

    JavaScript 2023年6月11日
    00
  • 详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑

    当使用Bootstrap表单验证和Bootstrap-select插件时,可能会发现在重置表单时,表单中的Bootstrap-select插件的验证提示并没有被清除,这是一个很常见的问题,本文将详细讲解如何解决这个问题。 前置知识 Bootstrap表单验证 Bootstrap表单验证是Bootstrap框架的一个组件,它可以帮助我们快速地验证表单中的数据是…

    JavaScript 2023年6月10日
    00
  • js对象关系图 方便dom操作

    JS对象关系图可以用来表示JS中各个对象之间的关系,有利于我们进行DOM操作。以下是实现的详细步骤: 安装JS对象关系图库 我们可以通过npm来安装JS对象关系图库,命令如下:npm install object-graph-js。 创建DOM对象 在接下来的实例中,我们将创建一个包含“Hello, World”的div元素,代码如下: const divE…

    JavaScript 2023年6月10日
    00
  • 一文教你如何实现localStorage的过期机制

    首先需要明确 localStorage 是HTML5标准中的一种客户端存储方式,可以在浏览器中存储数据并保留在客户端本地。而过期机制则是指设置一个过期时长,在达到时限之后,数据自动失效并被清空。 下面就来介绍如何实现 localStorage 的过期机制: 步骤1:封装localStorage 首先我们需要进行封装 localStorage,以方便我们在任何…

    JavaScript 2023年6月11日
    00
  • javascript中日期函数new Date()的浏览器兼容性问题

    JavaScript中的日期对象是非常常用的,其中一个常见的日期函数是new Date()。然而,在不同的浏览器中,它的行为是不一样的,因此需要特别注意。 不同浏览器中的行为差异 在 new Date() 方法中,如果不传递任何参数,那么它将返回当前日期和时间。例如: var now = new Date(); console.log(now); 但是,在不…

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