如何使用JavaScript制作轮播图

HTML结构代码: 

<div id="box">
			<div id="img">
				<img src="img/01.jpg">
				<img src="img/02.jpg">
				<img src="img/03.jpg" alt="">
				<img src="img/01.jpg" alt="">
			</div>
			<div id="direction">
				<div>⬅</div>
				<div>➡</div>
			</div>
			<div id="list">
				<span style="background-color: rgba(255, 0, 0, 1);"></span>
				<span></span>
				<span></span>
			</div>
		</div>

css结构代码:

<style>
			* {
				margin: 0;
				padding: 0;
			}

			div {
				-webkit-user-select: none;
				-moz-user-select: none;
				-ms-user-select: none;
				user-select: none;
			}

			#box {
				width: 100vw;
				height: 100vh;
				position: relative;
				overflow: hidden;
			}


			#img {
				width: 400%;
				height: 100vh;
				display: flex;
				justify-content: space-around;
			}

			#img img {
				width: 25%;
				height: 100vh;
			}

			#direction {
				width: 100%;
				height: 5vh;
				position: absolute;
				top: 45%;
				display: flex;
				justify-content: space-between;
			}

			#direction div {
				width: 5%;
				height: 5vh;
				text-align: center;
				border-radius: 10px;
				line-height: 5vh;
				font-size: 16px;
				background-color: rgba(0, 0, 0, 0.2);
				color: #fff;
				overflow: hidden;
			}

			#list {
				width: 100%;
				height: 5vh;
				position: absolute;
				bottom: 0;
				display: flex;
				justify-content: center;
			}

			#list span {
				display: block;
				width: 3%;
				height: 3vh;
				margin: 5px;
				border-radius: 100%;
				background-color: rgba(0, 0, 0, 1);
			}
		</style>

JavaScript的代码:

<script>
			// 获取到所有图片的父级div
			let img = document.getElementById("img");
			// 获取到所有的图片
			let imgs = img.children;
			console.log(imgs);
			// 获取到图片的宽度
			let imgWidth = imgs[0].offsetWidth;
			console.log(imgWidth);
			// 获取到左右箭头按钮
			let but = document.getElementById("direction").children;
			console.log(but);
			// 获取到最大的div 包含图片,按钮,小圆点
			let box = document.getElementById("box");
			// 下标
			let k = 0;
			// 获取到所有的小圆点
			let list = document.getElementById("list").children;
			console.log(list);
			// 页面打开设定永久性定时器,两秒执行一次
			let int = setInterval(stats, 2000);
			// 自动轮播事件
			function stats() {
				// 下标+1
				k++;
				// 设定过渡时间为1秒
				img.style.transition = "all 1s";
				img.style.marginLeft = '-' + k * imgWidth + "px";
				// 
				if (k == imgs.length - 1) {
					setTimeout(function() {
						k = 0;
						img.style.transition = "";
						img.style.marginLeft = "0px";
					}, 1000);
					list[0].style.backgroundColor = "rgba(255,0,0,1)";
					list[list.length - 1].style.backgroundColor = "rgba(0,0,0,1)";
				} else {
					list[k - 1].style.backgroundColor = "rgba(0,0,0,1)";
					list[k].style.backgroundColor = "rgba(255,0,0,1)";
				}
			}
			// 鼠标移入最大的div时清除定时器
			box.onmouseover = function() {
				clearInterval(int);
			}
			// 移出时设定定时器,开始轮播
			box.onmouseout = function() {
				int = setInterval(stats, 2000);
			}
			// 右箭头绑定点击下一张事件
			but[1].onclick = rightsta;
			//下一张事件
			function rightsta() {
				// 调用自动轮播事件
				stats();
				// 清除点击事件
				// 目的是为了防止短时间内多次点击导致出现bug
				but[1].onclick = "";
				// 在 1 秒后再次绑定点击事件
				// 因为过渡时间是 1 秒
				setTimeout(function() {
					but[1].onclick = rightsta;
				}, 1000);
			}

			but[0].onclick = lefts;
			// 上一张点击事件
			function lefts() {
				// 调用上一张轮播事件
				leftstats();
				// 上一张点击事件清除绑定
				but[0].onclick = "";
				// 1 秒后重新绑定
				setTimeout(function() {
					but[0].onclick = lefts;
				}, 1000);
			}
			// 上一张轮播事件
			function leftstats() {
				// 当到达第一张图片时
				if (k == 0) {
					// 让图片到达最后一张
					k = imgs.length - 1;
					// 过渡时间去除,保证用户看不到
					img.style.transition = "";
					// 移动到对应的位置
					img.style.marginLeft = `-${k*imgWidth}px`;
					// 小圆点的第一个变为黑色
					list[0].style.backgroundColor = "rgba(0,0,0,1)";
					// 小圆点的最后一个变为红色,表示当前为最后一张
					list[list.length - 1].style.backgroundColor = "rgba(255,0,0,1)";
				}
				// 设定一次性定时器,50毫秒后执行 k-- 也即是上一张
				setTimeout(function() {
					k--;
					// 加上过渡时间
					img.style.transition = "all 1s";
					// 移动
					img.style.marginLeft = '-' + k * imgWidth + "px";
					if (k < list.length - 1) { // 避免出现报错
						list[k + 1].style.backgroundColor = "rgba(0,0,0,1)";
						list[k].style.backgroundColor = "rgba(255,0,0,1)";
					}
				}, 50);
			}
		</script>

使用以上代码写出来的轮播图,在图片下方会有相对应图片变色的小圆点,可以点击上一张或下一张更换图片。 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/499309.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端学习<二>CSS基础——08-CSS属性:定位属性

CSS的定位属性有三种&#xff0c;分别是绝对定位、相对定位、固定定位。 position: absolute; <!-- 绝对定位 -->​position: relative; <!-- 相对定位 -->​position: fixed; <!-- 固定定位 -->​ 下面逐一介绍。 相对定位 相对定位&#xff1a;让…

经典永不过时 Wordpress模板主题

经得住时间考验的模板&#xff0c;才是经典模板&#xff0c;带得来客户的网站&#xff0c;才叫NB网站。 https://www.jianzhanpress.com/?p2484

用xshell或ftp连接本地虚拟机linux系统,centos7修改动态ip地址

如果不知道怎么下载vm本地虚拟机软件或者不知道怎么安装可以参考我上一篇博客 vmWare虚拟机下载安装详细教程,手把手一步一步教学-CSDN博客 安装好虚拟机软件我们想要通过xshell和ftp工具来管理,小黑框不太舒服哈哈哈 一.准备工作 输入命令来查看当前的ip地址 ip addr 可以…

【目标跟踪】红绿灯跟踪

文章目录 一、前言二、结果三、跟踪3.1、检测输入3.2、预测与运动补偿3.3、第一次匹配3.4、第二次匹配3.5、第三次匹配3.6、航迹的起始与信息的发布 四、后记 一、前言 红绿灯场景对当前无人驾驶来说是个灾难性的挑战。暂且不说复杂的十字路口&#xff0c;譬如简单的人行道红绿…

Go语言学习Day6:数组与切片

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1. 数组① 什么是数组② 数组的声明③ 初始化数组的几种方式④ 遍历数组元素⑤ 数组为值类型⑥ 数…

云平台教程 | 手把手教你绘制时序分析

爱基百客云平台小工具——时序分析使用教程目录 1 爱基百客云平台之时序分析 2 参数设置 3 任务查看 4 结果 01 爱基百客云平台小工具使用 首先&#xff0c;打开爱基百客官网&#xff1a;http://www.igenebook.com&#xff1b;点击菜单栏最右侧“云平台”按钮。 弹出云平…

Qt实现Kermit协议

1 概述 Kermit文件运输协议提供了一条从大型计算机下载文件到微机的途径。它已被用于进行公用数据传输。 其特性如下: Kermit文件运输协议是一个半双工的通信协议。它支持7位ASCII字符。数据以可多达96字节长度的可变长度的分组形式传输。对每个被传送分组需要一个确认。Kerm…

红米手机Redmi 不会自动弹出USB调试选项,如何处理?(红米小米均适用)

参考&#xff1a; 红米手机Redmi 不会自动弹出USB调试选项&#xff0c;如何处理&#xff1f;&#xff08;红米小米均适用&#xff09; - 知乎 以红米9A为例&#xff1b; 【设置】菜单进入后&#xff0c;找到【我的设备】&#xff0c; 选择【全部参数】&#xff0c; 对准miui版…

什么是framebuffer,怎么应用(二)————如何打印BMP图片、字幕函数、字符串

如何切换到终端模式 在昨天写的文章中&#xff0c;没有写到如何切换到终端模式&#xff0c;在编译完函数之后&#xff0c;我们需要从桌面切换到终端模式&#xff1a; ALTCTRLF3切换到终端模式后&#xff0c;登录账号名与密码&#xff0c;其余操作均有桌面终端一样。 如何切换…

机器学习概论—增强学习

机器学习概论—增强学习 强化学习(Reinforcement Learning, RL)或者说是增强学习,是机器学习的一个领域,旨在使智能体通过与环境的交互学习如何做出决策,它是关于在特定情况下采取适当的行动来最大化奖励。它被各种软件和机器用来寻找在特定情况下应采取的最佳行为或路径…

Unity类银河恶魔城学习记录11-7 p109 Aplly item modifiers源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData_Equipment.cs using System.Collections; using System.Collecti…

第三篇:3.2 广告可见性 - IAB与MRC及《增强现实广告效果测量指南1.0》

翻译计划 第一篇 概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇 广告效果测量定义和其他矩阵之- 3.1 广告印象&#xff08;AD Impression&#xff09;第三篇 广告效果测量定义和其他矩阵之- 3.2 可见性 &#xff08;Viewability&#xf…

计算机视觉的应用26-关于Fast-R-CNN模型的应用场景,Fast-R-CNN模型结构介绍

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用26-关于Fast-R-CNN模型的应用场景&#xff0c;Fast-R-CNN模型结构介绍。Fast R-CNN是一种深度学习模型&#xff0c;主要用于目标检测任务&#xff0c;尤其适用于图像中物体的识别与定位。该模型在基…

【Qt】常用控件(输入类)

目录 一、Line Edit二、Text Edit三、ComBo四、DateTimeEdit五、Slider 一、Line Edit QLineEdit 用来表示单行输入框&#xff0c;可以输入一段文本&#xff0c;但是不能换行。 属性说明test输入框中的文本inputMask输入内容格式约束maxLength最大长度frame是否添加边框echoM…

政安晨:专栏目录【TensorFlow与Keras机器学习实战】

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本篇是作者政安晨的专栏《TensorFlow与Keras机器…

【职场攻略】撰写求职信的艺术:如何用AI技术让你脱颖而出

AI与求职的完美结合&#xff1a;会话式AI产品如何助力你的求职之路&#xff1f; 在当今竞争激烈的求职市场中&#xff0c;一封精心准备的求职信可以为你打开通往理想工作的大门。一封好的求职信不仅能展示你的专业技能和工作经验&#xff0c;还能体现你对职位的热情和对公司文化…

labelme AI 模型运用

一、lebelme 1、界面介绍 点击上图位置&#xff0c;选择对应的模型。这里我每个模型都测试了一下&#xff0c;EfficientSam这个模型最好用&#xff0c;准确率和速度都ok。 2、使用方法 目标框标注方法&#xff1a;点左上角【编辑】-> 【Create Ai-Mask】就可以标志了&…

【智能家居项目】RT-Thread版本——DHT11获取温湿度 | MQTT上传到服务器 | 服务器控制外设

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 这篇文章中&#xff0c;本喵将使用RT-Thread Studio来实现这个智能家居的项目&#xff0c;最终…

AXS2003B 爱协生 2.4W单通道 AB类音频功率放大器 兼容LM4890 低成本

AXS2003B 是一颗单通道AB类音频功率放大器。在5V电源供电&#xff0c;THDN10%&#xff0c;4欧姆负载上可以输出2.4W 的功率。 AXS2003B优异的噪声和THD指标可以提供高品质的音频信号放大。极少的外围元件就能提供芯片稳定工作&#xff0c;大大减少了PCB面积并降低成本。 AXS20…

SSL证书一年多少钱?有便宜的吗?

SSL安全证书的价格因其类型、品牌、验证级别、附加功能&#xff08;如多域名支持、通配符功能等&#xff09;以及购买时长&#xff08;通常以年为单位&#xff09;的不同而有所差异。以下是大致的价格范围&#xff1a; 永久免费SSL证书_永久免费https证书_永久免费ssl证书申请…
最新文章