原生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日

相关文章

  • js函数调用的方式

    下面是详细讲解 JavaScript 函数调用的方式的完整攻略。 直接调用函数 我们可以使用直接调用函数的方式来执行函数。这种方式最为简单,直接在函数名后加上()即可,例如: function sayHello() { console.log("Hello World"); } sayHello(); // 输出 "Hello …

    JavaScript 2023年5月27日
    00
  • 在ASP.NET 2.0中操作数据之二十二:为删除数据添加客户端确认

    为删除数据添加客户端确认是一个常见的需求,通过在页面上添加一个确认对话框,可以避免用户误操作删除数据。在ASP.NET 2.0中,可以使用JavaScript来实现该功能。 步骤一:在删除按钮上添加客户端事件 首先,我们需要在删除按钮上添加一个客户端事件,用于触发删除确认对话框。在ASP.NET中,可以使用OnClientClick属性来添加客户端事件,示例…

    JavaScript 2023年6月10日
    00
  • js console.log打印对像与数组用法详解

    接下来我将为您详细讲解js中console.log打印对象与数组的用法,以及两个样例说明。 什么是console.log console.log()是Javascript中用来打印信息到控制台(console)的方法。我们可以在控制台里面看到我们传递给console.log()方法的参数。 打印对象 当我们需要打印一个对象时,我们可以直接传入对象参数给con…

    JavaScript 2023年5月27日
    00
  • JavaScript中的数学运算介绍

    下面是“JavaScript中的数学运算介绍”的完整攻略: JavaScript中的数学运算介绍 在 JavaScript 中,我们可以进行任意的数学运算,例如加法、减法、乘法、除法等等。下面就来一一介绍这些运算。 加法 在 JavaScript 中,加法运算使用加号(+)进行表示。 let a = 3; let b = 4; let c = a + b; …

    JavaScript 2023年5月18日
    00
  • JS字符串累加Array不一定比字符串累加快(根据电脑配置)

    本文主要探讨 JavaScript 中字符串的拼接方式,包括使用数组累加字符串和直接字符串累加的方法,以及它们的性能比较。同时,本文还会详细介绍具体的测试方法和结果分析。 背景 在 JavaScript 中,字符串是一个常见的数据类型,我们通常会遇到需要拼接字符串的场景,比如将一个数组中的元素用逗号隔开成一个字符串。在这种场景下,我们通常采用以下两种方式: …

    JavaScript 2023年5月28日
    00
  • JavaScript实现栈结构详细过程

    以下是JavaScript实现栈结构的详细攻略: 什么是栈结构? 栈是一种线性数据结构,具有先进后出的特点,也就是最后压入栈中的数据最先弹出。栈的操作主要包括入栈(push)、出栈(pop)和查看栈顶元素(peek)。 JavaScript实现栈结构的详细过程 1.使用数组来实现栈结构 我们可以使用JavaScript中的Array来实现栈结构,Array的…

    JavaScript 2023年5月28日
    00
  • 借助script进行Http跨域请求:JSONP实现原理及代码

    下面是“借助script进行Http跨域请求:JSONP实现原理及代码”的完整攻略。 什么是JSONP? JSONP是一种解决跨域请求的方法,其原理是利用标签的src属性不受同源策略的限制来实现跨域请求。在JSONP中,客户端通过动态创建script标签,向服务端发送一个请求,并指定一个回调函数的名称。服务端接收到请求后,将数据作为参数传递给指定的回调函数,…

    JavaScript 2023年5月27日
    00
  • 巧用局部变量提升javascript性能

    当JavaScript代码执行时,会先根据作用域中的变量、函数、以及this等信息,创造出执行上下文,并形成可用的作用域链,接着才会开始执行代码。局部变量的定义在这个过程中扮演着重要的角色,局部变量能够有效地提升JavaScript代码的性能。 局部变量提升 JavaScript代码执行时,会遇到变量和函数的声明,JavaScript会预处理变量和函数声明,…

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