Html+Css+JavaScript实现完整的轮播图功能

概要

这个案例具备常见轮播图完整的功能,大家可以根据自己的需求去修改; 代码可以直接复制运行,需要安装sass

主要功能:

(1)鼠标移入轮播图,左右两边的按钮出现,离开则隐藏按钮;(CSS完成)

(2)点击左侧按钮,图片向右播放一张,右侧按钮同理;

(3)图片播放的同时,下面的小圆圈也会随之变化;

(4)点击小圆圈,播放相应的图片;

(5)鼠标移入小圆圈,播放相应的图片(看需求是要点击还是移入,把click改成mouseenter)

(6)鼠标移出轮播图自动播放图片

(7)鼠标移入轮播图暂停播放图片

页面效果:

大家觉得有帮助的话可以点个赞支持下,谢谢啦~

完整代码:

一、Css样式,使用sass预编译器

<style >/* 默认样式 */* {margin: 0;padding: 0;a {text-decoration: none;}li {list-style: none;}}/* 轮播图盒子 */.box {width: 600px;height: 350px;margin: 70px auto;position: relative;overflow: hidden;/* 上、下一页 */.prev,.next {opacity: 0;display: inline-block;cursor: pointer;width: 50px;height: 50px;position: absolute;top: 50%;color: #d2d0d0;z-index: 33;text-align: center;font-size: 40px;transform: translateY(-25px);}/* 上一页不同的属性 */.prev {left: 0;border-radius: 0 25% 25% 0;}/* 下一页不同的属性 */.next {right: 0;border-radius: 25% 0 0 25%;}/* 图片容器 */.images {position: absolute;top: 0;left: 0;width: 1000%;/* 图片 */li {list-style: none;float: left;img {width: 600px;height: 350px;}}}/* 小圆点盒子 */.dots {position: absolute;bottom: 10px;left: 50%;height: 13px;transform: translateX(-50%);background: rgba(255, 255, 255, .3);border-radius: 7px;display: flex;/* 小圆点 */li {width: 10px;height: 10px;border-radius: 50%;border-color: white;background-color: rgb(0, 0, 0, 0.2);margin: 2px 5px;cursor: pointer;}/* 选择的小圆点 */.active {background-color: rgb(247, 243, 243);}}}/* 鼠标移入盒子显示上、下按钮 */.box:hover .prev,.box:hover .next {opacity: 1;}/* 鼠标移入上、下按钮,背景模糊 */.box .prev:hover,.box .next:hover {background-color: rgba(0, 0, 0, 0.2);}
</style>

二、Html结构

<body><div class="box"><!-- 左箭头 --><a href="javascript:;" class="prev"> &lt;</a><!-- 右箭头 --><a href="javascript:;" class="next"> &gt;</a><ul class="images"><li><a href="#"><img src="./src/assets/00.jpg" alt="轮播图图片"></a></li><li><a href="#"><img src="./src/assets/11.jpg" alt="轮播图图片"></a></li><li><a href="#"><img src="./src/assets/12.jpg" alt="轮播图图片"></a></li><li><a href="#"><img src="./src/assets/13.jpg" alt="轮播图图片"></a></li><li><a href="#"><img src="./src/assets/15.jpg" alt="轮播图图片"></a></li><li><a href="#"><img src="./src/assets/16.jpg" alt="轮播图图片"></a></li></ul><ul class="dots"><!-- li 用js动态生成--></ul></div>
</body>

三、JavaScript

<script>/* 功能需求(1)当鼠标经过轮播图,左右两边的按钮出现,离开则隐藏按钮;(CSS完成)(2)点击左侧按钮,图片向右播放一张,右侧同理;(3)图片播放的同时,下面的小圆圈也会随之变化;(4)点击小圆圈,可以播放相应的图片;(5)鼠标移入小圆圈,可以播放相应的图片(看需求是要点击还是移入,把click改成mouseenter)(6)鼠标移出轮播图会自动播放图片(7)鼠标移入轮播图会暂停播放图片*/window.addEventListener('load', function () {// 图片的下标var slideIndex = 0;//circle 控制小圆圈的播放var circle = 0;//获取小圆圈盒子var dots = document.querySelector('.dots');//获取所有图片var images = document.querySelector('.images');//获取轮播图容器var box = document.querySelector('.box')//获取轮播图容器宽度var box_width = box.offsetWidth;//1.获取上、下一页并添加点击事件var prev = document.querySelector(".prev")var next = document.querySelector(".next")//上一页prev.addEventListener("click", function () {if (slideIndex == 0) {//已经第一页了,再上一页就该是最后一页slideIndex = images.children.length - 1images.style.left = -slideIndex * box_width + 'px';}slideIndex--;animate(images, -slideIndex * box_width)// 小圆圈跟随一起变化circle--;circle = circle < 0 ? dots.children.length - 1 : circle;//调用函数circleChange();});//下一页next.addEventListener("click", function () {if (slideIndex == images.children.length - 1) {//已经最后一页了,再下一页就该是第一页images.style.left = 0;slideIndex = 0;}slideIndex++;animate(images, -slideIndex * box_width);// 小圆圈跟随一起变化circle++;if (circle == dots.children.length) {circle = 0;}circleChange();});// 2.动态生成小圆圈 有几张图片,就生成几个小圆圈var dots = document.querySelector('.dots');for (var i = 0; i < images.children.length; i++) {//创建一个小livar li = document.createElement('li');//记录当前小圆圈的索引号 通过创建自定义属性来做li.setAttribute('index', i);dots.appendChild(li);//小圆圈的排他思想 在生成小圆圈的同时绑定点击事件li.addEventListener('click', function () {for (var i = 0; i < dots.children.length; i++) {dots.children[i].className = ' '; //清空样式}this.className = 'active';//点击小圆圈,移动图片,本质移动的是ul//ul 的移动距离 就是小圆圈的索引号 * 图片的宽度 注意是负值// 当我们点击了某个小li 就拿到它的index属性var index = this.getAttribute('index');//当我们点击了某个小li 就要把这个小li 的index给slideIndexslideIndex = index;circle = index;animate(images, -slideIndex * box_width);})}//把dots 里面的第一个小li设置类名为 activedots.children[0].className = 'active';// 实现滑动到最后一张照片时 可以平滑地过渡到第一张,克隆第一张图片 放在ul最后面,在其后克隆小圆点不会多var first = images.children[0].cloneNode(true);images.appendChild(first);//3.点击小圆圈添加激活样式function circleChange() {for (var i = 0; i < dots.children.length; i++) {dots.children[i].className = '';}dots.children[circle].className = 'active';}//定时器自动播放3Svar timer = setInterval(function () {next.click();}, 3000);//3.绑定鼠标移入移出事件//鼠标移入,停止播放,清除计时器box.addEventListener('mouseenter', function () {clearInterval(timer);timer = null;//清除计时器});//鼠标离开,轮播图自动切换 相当于点击右箭头box.addEventListener('mouseleave', function () {timer = setInterval(function () {// 手动调用事件next.click();}, 3000);});//轮播图播放动画function animate(obj, target, callback) {//让元素只有一个定时器在执行,需要清除以前的定时器clearInterval(obj.timer);obj.timer = setInterval(function () {var step = (target - obj.offsetLeft) / 10;step = step > 0 ? Math.ceil(step) : Math.floor(step);if (obj.offsetLeft == target) {//停止动画 本质是停止定时器clearInterval(obj.timer)//回调函数写到定时器结束位置if (callback) {callback();}}//把每次加1这个步长值改为一个慢慢变小的值obj.style.left = obj.offsetLeft + step + 'px';}, 15);}next.click();})
</script>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

proteus8.15安装教程

proteus8.15安装教程 1.管理员运行 2.一直NEXT到这一步&#xff0c;需要注意&#xff0c;一定要选这一个 3.选中后出现 4.一直下一步到更新 这边结束后准备激活&#xff1a; 1.安装激活插件&#xff0c;先关闭防火墙 2.下一步 3.最后&#xff0c;将数据库放在根目录下 …

从零开始配置pwn环境:sublime配置并解决pwn脚本报错问题

1.sublime安装 Download - Sublime Text ──(holyeyes㉿kali2023)-[~] └─$ sudo dpkg -i sublime-text_build-4169_amd64.deb [sudo] password for holyeyes: Selecting previously unselected package sublime-text. (Reading database ... 409163 files and directori…

LeetCode——二叉树

二叉树 思路【labuladong】 1&#xff09;是否可以通过遍历一遍二叉树得到答案&#xff1f;如果可以&#xff0c;用一个traverse函数配合外部变量来实现——回溯 2&#xff09;是否可以定义一个递归函数&#xff0c;通过子问题的答案推导出原问题的答案&#xff1f;如果可以…

Halcon模板图像gen_contour_region_xld/find_shape_model

Halcon模板图像 文章目录 Halcon模板图像1. 从参考图像的特定区域中创建模板2. 使用XLD轮廓创建模板 本文将讲述如何创建合适的模板。可以从参考图像的特定区域中创建&#xff0c;也可以使用XLD轮廓创建合适的模板。接下来将分别介绍这两种方法。 1. 从参考图像的特定区域中创建…

【万字解析】Webpack 优化构建性能(分析->优化)

Webpack 优化构建性能 1. 分析构建性能 分析构建体积 全局安装 webpack-bundle-analyzer 插件 npm i -g webpack-bundle-analyzer运行 webpack-bundle-analyzer webpack-bundle-analyzer分析构建速度 // webpack.config.jsconst SpeedMeasurePlugin require("speed-me…

玩转浏览器开发者工具:发现前端世界的秘密花园

解锁网页背后的奥秘 对于许多前端开发者和网页设计师来说&#xff0c;浏览器的开发者工具是不可或缺的利器。通过这些工具&#xff0c;我们可以深入了解网页的内部结构、调试代码、测试设计以及优化性能。在本文中&#xff0c;我们将带你探索浏览器开发者工具的奥秘&#xff0…

huggingface学习 | 云服务器使用hf_hub_download下载huggingface上的模型文件

系列文章目录 huggingface学习 | 云服务器使用git-lfs下载huggingface上的模型文件 文章目录 系列文章目录一、hf_hub_download介绍二、找到需要下载的huggingface文件三、准备工作及下载过程四、全部代码 一、hf_hub_download介绍 hf_hub_download是huggingface官方支持&…

快速上手Flask(二) flask-restful以及全局响应配置

文章目录 快速上手Flask(二) flask-restful以及全局响应配置什么是flask-restful安装flask_restfulflask_restful 使用flask 使用app.route 装饰器自定义路由 全局响应配置flask的自带的jsonify方法JSONIFY_PRETTYPRINT_REGULARJSONIFY_MIMETYPE重写jsonify方法 快速上手Flask(…

力扣【四数之和】

一、题目描述 18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#x…

大数据开发之电商数仓(hadoop、flume、hive、hdfs、zookeeper、kafka)

第 1 章&#xff1a;数据仓库 1.1 数据仓库概述 1.1.1 数据仓库概念 1、数据仓库概念&#xff1a; 为企业制定决策&#xff0c;提供数据支持的集合。通过对数据仓库中数据的分析&#xff0c;可以帮助企业&#xff0c;改进业务流程、控制成本&#xff0c;提高产品质量。 数据…

C#中chart控件

C#中chart控件 图表的5大集合 例子 第一步&#xff1a;创建工程 放入chart控件 series集合 选择图标类型 选择绘制曲线的宽度和颜色。 显示数据标签 Title集合 添加标题 调整标题字体&#xff1a;大小和颜色 CharsArea集合 对坐标轴进行说明 设置间隔 设置刻度…

【线性代数与矩阵论】矩阵的谱半径与条件数

矩阵的谱半径与条件数 2023年11月18日 文章目录 矩阵的谱半径与条件数1. 矩阵的谱半径2. 谱半径与范数的关系3. 矩阵的条件数下链 1. 矩阵的谱半径 定义 设 A ∈ C n n {A\in \mathbb C^{n \times n} } A∈Cnn &#xff0c; λ 1 , λ 2 , ⋯ , λ n { \lambda_1,\lambda_2…

第11章_常用类和基础API拓展练习(字符串相关练习,日期时间API练习,比较器练习,其它API练习)

文章目录 第11章_常用类和基础API拓展练习字符串相关练习1&#xff1a;阅读题1、length说明2、阅读代码&#xff0c;分析结果3、阅读代码&#xff0c;分析结果4、阅读代码&#xff0c;分析结果5、阅读代码&#xff0c;分析结果6、阅读代码&#xff0c;分析结果7、阅读代码&…

【Linux】Linux基本操作(二):rm rmdir man cp mv cat echo

承接上文&#xff1a; 【【Linux】Linux基本操作&#xff08;一&#xff09;&#xff1a;初识操作系统、ls、cd、touch、mkdir、pwd 】 目录 1.rmdir指令 && rm 指令&#xff1a; rmdir -p #当子目录被删除后如果父目录也变成空目录的话&#xff0c;就连带父目录一…

Elasticsearch 字段更新机制

目录 不支持原地更新 更新过程 段合并&#xff08;Segment Merge&#xff09; 结论 不支持原地更新 Elasticsearch 不支持原地更新&#xff08;in-place update&#xff09;索引中的单个字段。由于 Elasticsearch 使用了不可变的倒排索引&#xff0c;一旦文档被写入&#x…

崩溃了!我说用attach进行问题定位,面试官问我原理

Arthas&#xff08;阿尔萨斯&#xff09;是一款开源的Java诊断和监控工具&#xff0c;可以在生产环境中进行实时的应用程序分析和故障排查。Arthas的实现原理主要基于Java Instrumentation API和Java Agent技术。 Java Agent 是 Java 编程语言提供的一种特殊机制&#xff0c;允…

多模态是什么意思,在生活工业中有哪些应用?

问题描述&#xff1a;多模态是什么意思&#xff0c;在生活工业中有哪些应用&#xff1f; 问题解答&#xff1a; 多模态&#xff08;Multimodal&#xff09;指的是同时利用多种不同模式或传感器的情境、系统或技术。在不同领域&#xff0c;多模态可以涉及到多种感官或信息源的…

第4周:综合应用和实战项目 Day 25-27: 模型调优和优化学习高级技巧

第4周&#xff1a;综合应用和实战项目 Day 25-27: 模型调优和优化学习高级技巧 在这个阶段&#xff0c;我们将专注于提高模型的性能&#xff0c;通过使用高级技巧如正则化、dropout、批标准化等。这些技术对于防止过拟合和提高模型的泛化能力非常重要。 重点学习内容&#xff…

springboot(ssm电子产品销售网站 在线购物商城系

springboot(ssm电子产品销售网站 在线购物商城系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09;…

3.php开发-个人博客项目输入输出类留言板访问IPUA头来源

目录 知识点 : 输入输出 配置环境时&#xff1a; 搜索框&#xff1a; 留言板&#xff1a; 留言板的显示&#xff08;html&#xff09;&#xff1a; php代码显示提交的留言&#xff1a; 写入数据库 对留言内容进行显示&#xff1a; php全局变量-$_SERVER 检测来源 墨…