JavaScript实现简易轮播图最全代码解析(ES6面向对象)
作者:飒尔 发布时间:2024-04-16 10:40:32
标签:js,轮播图
本文实例为大家分享了JavaScript实现简易轮播图的具体代码,供大家参考,具体内容如下
完整代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ES6轮播图</title>
<script></script>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 500px;
height: 300px;
border: 1px solid silver;
overflow: hidden;
margin: auto;
margin-top: 50px;
position: relative;
top: 0;
left: 0;
}
.outer {
list-style: none;
position: absolute;
top: 0;
left: 0;
transition: .3s all linear;
}
.img {
width: 500px;
height: 300px;
float: left;
}
.btns span {
position: absolute;
width: 25px;
height: 40px;
top: 50%;
margin-top: -20px;
line-height: 40px;
text-align: center;
font-weight: bold;
font-family: Simsun;
font-size: 30px;
border: 1px solid silver;
opacity: 0.5;
cursor: pointer;
color: #fff;
background: black;
}
.btns .left {
left: 5px;
}
.btns .right {
left: 100%;
margin-left: -32px;
}
.right > :first-child, .left > :first-child {
width: 35px;
height: 35px;
}
.oOl {
width: 163px;
position: absolute;
right: 0;
left: 0;
margin: auto;
bottom: 10px;
list-style: none;
}
.oLi {
width: 25px;
height: 25px;
background: white;
border-radius: 50%;
float: left;
}
.color {
background: black;
}
</style>
</head>
<body>
<div class="box">
<ul class="outer">
<li class="img" style="background-image:url(img/0.jpeg)"></li>
<li class="img" style="background-image:url(img/1.jpeg)"></li>
<li class="img" style="background-image:url(img/2.jpeg)"></li>
<li class="img" style="background-image:url(img/3.jpeg)"></li>
<li class="img" style="background-image:url(img/4.jpeg)"></li>
</ul>
<div class="btns">
<span class="left"><</span>
<span class="right">></span>
</div>
</div>
</body>
<script>
class Chart{
constructor(name, json) {
//获取盒子名
this.box = document.querySelector(name);
this.json = json;
//获取轮播图的属性
this.outer = document.querySelector(name + ' .outer'); //注意加空格
this.left = document.querySelector(name + ' .left');
this.right = document.querySelector(name + ' .right');
//初始化
this.timer = null; //自动播放
this.iNow = 0;
this.init();
}
init() {
const that = this; //保存一个this
console.log(this.json.a);
if (this.json.a){
console.log(1);
}
//克隆第一张放到最后
let uLi = that.outer.children[0].cloneNode(true);
that.outer.appendChild(uLi);
that.outer.style.width = that.outer.children.length * that.outer.children[0].offsetWidth + 'px';
//点击左右滑动
if (that.json.slide) {
that.left.style.display = 'block';
that.right.style.display = 'block';
this.left.onclick = () => that.rightGo();
this.right.onclick = () => that.leftGo();
}
//自动播放
if (that.json.move) {
that.moveGo();
//鼠标移入移出
if (that.json.loop) {
that.box.onmousemove = () => clearInterval(that.timer);
that.box.onmouseout = () => that.moveGo();
}
}
//展示小圆点
if (that.json.nav) {
let oOL = document.createElement('ol');
oOL.className = 'oOl';
oOL.style.left = that.json.distanceLeft + 'px';
that.box.appendChild(oOL);
for (let i = 0; i < that.outer.children.length - 1; i++) {
let oLi = document.createElement('li');
oLi.className = 'oLi';
oLi.style.marginLeft = that.json.distance + 'px';
oOL.appendChild(oLi);
}
oOL.style.width = ((that.outer.children.length - 1) * document.querySelector('.oLi').offsetWidth) + (that.json.distance * that.outer.children.length) + 'px';
that.alike();
}
};
rightGo() {
this.iNow++;
if (this.iNow >= this.outer.children.length) {
this.iNow = 1;
this.outer.style.transition = '0s all linear';
this.outer.style.left = 0;
}
this.outer.style.left = -this.iNow * this.outer.children[0].offsetWidth + 'px';
this.outer.style.transition = '0.3s all linear';
this.alike();
};
leftGo() {
this.iNow--;
if (this.iNow <= -1) {
this.iNow = this.outer.children.length - 1;
this.outer.style.transition = '0s all linear';
this.outer.style.left = -(this.outer.children.length - 1) * this.outer.children[0].offsetWidth + 'px';
this.iNow = this.outer.children.length - 2;
}
this.outer.style.left = -this.iNow * this.outer.children[0].offsetWidth + 'px';
this.outer.style.transition = '0.3s all linear';
this.alike();
};
moveGo() {
const that = this;
this.timer = setInterval(() => that.rightGo(), that.json.speed || 1500)
};
//圆点对应每张图片
alike() {
let li = document.querySelectorAll('.oLi');
for (let i = 0; i < li.length; i++) {
li[i].classList.remove('color');
if (i == this.iNow) {
li[i].classList.add('color');
} else {
li[i].classList.remove('color');
}
//特殊:最后一张的时候是第一个
if (this.iNow == li.length) {
li[0].classList.add('color');
}
//小圆点点击事件
if (this.json.event) {
li[i].onmouseover = () => {
for (let i = 0; i < li.length; i++) {
li[i].classList.remove('color');
}
li[i].classList.add('color');
this.outer.style.left = -i * this.outer.children[0].offsetWidth + 'px';
}
}
}
}
}
new Chart('.box', {
move: true, //自动轮播
speed: 1500, //轮播速度
loop: true, //鼠标移入移出效果
slide: true, //点击左右滑动效果
nav: true, //展示小圆点
distance: 20, //小圆点间距
event: true //小圆点事件
})
</script>
</html>
图片:
来源:https://blog.csdn.net/CSErtuh/article/details/120186188
0
投稿
猜你喜欢
- Neo4j是面向对象基于Java的 ,被设计为一个建立在Java之上、可以直接嵌入应用的数据存储。此后,其他语言和平台的支持被引入,Neo4
- 要想在ASP.NET项目中使用SQLite数据库,先需下载一个ADO.NET 2.0 SQLite Data Provider,下载地址为:
- # 从X和Y中取出相应步长对应的数组并保存至x_data和y_data中x_data = []y_data = []for i in ran
- 本文实例讲述了Python unittest模块用法。分享给大家供大家参考,具体如下:python的unittest模块提供了一个测试框架,
- 本文实例讲述了php获取给定日期相差天数的方法。分享给大家供大家参考,具体如下:方法一:<?phpfunction count_day
- 我确定有很多关于Unicode和Python的说明,但为了方便自己的理解使用,我还是打算再写一些关于它们的东西。 字节流 vs U
- 一、介绍事务是数据库中的一个非常重要的概念,它是指由一系列操作所组成的逻辑单位,在这个单位内,要么所有操作都成功完成,要么所有操作都不会执行
- 目录你有过摸鱼时间吗实现思路运行环境界面布局定时刷新剩余时间完整代码你有过摸鱼时间吗在互联网圈子里,常常说996上班制,但是也不乏965的,
- 引言“ 这是MySQL系列笔记的第十二篇,文章内容均为本人通过实践及查阅资料相关整理所得,可用作新手入门指南,
- 本文实例讲述了python用10行代码实现对 * 的检测功能。分享给大家供大家参考。具体如下:原理:将图片转换为YCbCr模式,在图片中寻
- 一、ASP的平反想到ASP 很多人会说 “asp语言很蛋疼,不能面向对象,功能单一,很多东西实现不了” 等等诸如此类。 以上说法都是错误的,
- 这篇文章主要介绍了python多进程并发demo实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- Golang 是一种简洁高效的编程语言,拥有强大的并发支持和丰富的标准库。在 Golang 中,计时器(timer)是一种常见的工具,用于定
- Hello,各位读者朋友们好啊,我是小张~这不国庆嘛,就把最近很火的一个韩剧《鱿鱼游戏》刷了下,这部剧整体剧情来说还是非常不错的,很值得一看
- 现状≠将来?程序员做设计本身就很悲哀,纠结于客户与坚持之间就更是如此。无论我今后的路会怎么走,我想始终不变的事情就是与客户博弈了。无论是放弃
- 前言无聊的时候做了一个搜索文章的软件,有没有更加的方便快捷不知道,好玩就行了环境使用Python 3.8Pycharm模块使用import
- 虽然有些人认为区块链是一个早晚会出现问题的解决方案,但是毫无疑问,这个创新技术是一个计算机技术上的奇迹。那么,究竟什么是区块链呢?区块链以比
- 本文实例讲述了Python实现周期性抓取网页内容的方法。分享给大家供大家参考,具体如下:1.使用sched模块可以周期性地执行指定函数2.在
- 通过结构体生成jsonbuf, err := json.MarshalIndent(s, "", " &quo
- 本文实例讲述了pymongo实现多结果进行多列排序的方法。分享给大家供大家参考。具体分析如下:这里多列排序即指定多个排序字段。集合查询结果排