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

yizhihongxing

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

相关文章

  • ScrollDown的基本操作示例

    关于”ScrollDown的基本操作示例”的完整攻略,可以按照以下步骤进行: 1. 打开ScrollDown 在浏览器中输入ScrollDown的地址,即可进入。 2. 查看菜单栏 在网页的菜单栏中,有多个选项,包括: Home Features Examples Documentation Support 3. 查看示例及其操作 在菜单栏中选择”Examp…

    JavaScript 2023年6月10日
    00
  • JavaScript 基础问答一

    JavaScript 基础问答一 中包含了一些关于JavaScript基础知识的问题,下面我将从以下几个方面对其进行详细讲解。 基本数据类型和引用数据类型 JavaScript中的数据类型可以分为基本数据类型和引用数据类型。基本数据类型包括:String、Number、Boolean、null、undefined,引用数据类型包括:Object、Array、…

    JavaScript 2023年5月19日
    00
  • JavaScript Window 打开新窗口(window.location.href、window.open、window.showModalDialog)

    JavaScript Window 打开新窗口 有3种常用的JavaScript方法可以打开一个新窗口,它们分别是window.location.href、window.open和window.showModalDialog。接下来,我们将详细讲解它们的使用方法和区别。 window.location.href window.location.href 可以…

    JavaScript 2023年6月11日
    00
  • 用javascript实现倒计时效果

    下面给出实现倒计时效果的完整攻略。 标题 用JavaScript实现倒计时效果 步骤 1. 获取倒计时目标时间 要实现倒计时效果,首先需要获取倒计时的目标时间。这里我们可以利用JavaScript内置的Date对象来获取目标时间。 const targetTime = new Date(‘2021-10-15T18:00:00Z’).getTime(); /…

    JavaScript 2023年5月27日
    00
  • JS中this的4种绑定规则详解

    下面是对于“JS中this的4种绑定规则详解”的完整攻略: 1. 默认绑定规则 默认绑定规则是指,在函数调用时,若函数调用时调用点没有指定调用的对象,this会绑定在全局对象上,即window(在浏览器环境下)。 示例代码如下: function foo() { console.log(this.a); } var a = 2; foo(); // 输出2 …

    JavaScript 2023年6月10日
    00
  • ES6 对象的新功能与解构赋值介绍

    ES6对象的新功能与解构赋值介绍 ES6是ECMAScript的第6个版本,新增了许多语言特性和语法糖。其中,对象的新功能和解构赋值是 ES6 最重要的特性之一。本文将分别介绍 ES6 对象的新功能和解构赋值的使用方法。 ES6对象的新功能 属性简写 在 ES6 之前,定义对象的属性时需要写成 key: value 的形式,如: var a = 1; var…

    JavaScript 2023年6月11日
    00
  • js判断两个日期是否相等的方法

    JS判断两个日期是否相等的方法有多种实现方式,下面将分别介绍两种常用的方法: 方法一:将日期转为时间戳比较 将两个日期对象转化为时间戳(即毫秒数)后进行比较。 function compareDate(date1, date2) { return date1.getTime() === date2.getTime(); } 上述代码中,getTime() 方…

    JavaScript 2023年5月27日
    00
  • JavaScript Canvas编写炫彩的网页时钟

    下面是我对”JavaScript Canvas编写炫彩的网页时钟”的完整攻略。 什么是Canvas? Canvas 是 HTML5 中添加的绘图标签,它允许在浏览器中绘制图像、图形和动画。Canvas 与 SVG (纯向量)形成鲜明对比,它使用像素来绘制图像、图形和动画。 开始编写时钟 我们将在 HTML 中创建一个结构,然后使用 JavaScript 在 …

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