css基础之实现轮播图

原理介绍

图片轮播的原理是通过控制显示和隐藏不同的图片来实现图像的切换,从而创建连续播放的效果。用到的知识点有定位和定时器。

实现步骤:

  1. HTML 结构: 首先,需要在HTML中创建一个包含轮播图片的容器,通常使用 <div><ul> 元素。每张图片通常嵌套在容器内的单独元素中,例如 <div><li>

  2. CSS 样式: 通过CSS样式,定义轮播容器的尺寸、位置、样式以及图片的尺寸和位置。使用CSS来设置图片的显示和隐藏,通常通过display: none;或者opacity: 0;来隐藏不显示的图片。

  3. JavaScript 逻辑: JavaScript用于控制图片的切换。

    • 通过JavaScript获取所有的轮播项(图片)以及控制按钮(如上一张和下一张按钮)。

    • 使用一个变量(通常称为currentSlide)来跟踪当前显示的图片的索引。

    • 当用户点击上一张或下一张按钮时,JavaScript会更新currentSlide的值,并根据currentSlide来显示相应的图片。

    • 通常会实现循环播放,当显示最后一张图片时,再点击下一张按钮会回到第一张图片,以及当显示第一张图片时,再点击上一张按钮会回到最后一张图片。

    • 可以使用定时器(例如setInterval)来自动切换图片,实现自动播放功能。

实现过程

html部分:html结构有四部分,最外层的容器,然后放置图片的容器、切换的按钮,图片的序号。

<body><div class="container"><div class="slide"><div class="img1"></div></div><div class="slide"><div class="img2"></div></div><div class="slide"><div class="img3"></div></div><div id="nextBtn">&gt;</div><div id="prevBtn">&lt;</div><div class="controls"><ul class="num-ul"><li>1</li><li>2</li><li>3</li></ul></div></div>
</body>

css部分:利用定位布局好容器里元素的位置。

<style>.container {width: 400px;height: 200px;margin: 0 auto;overflow: hidden;position: relative;}.slide {width: 100%;height: 100%;display: none;}.img1 {width: 400px;height: 200px;background: yellow;}.img2 {width: 400px;height: 200px;background: goldenrod;}.img3 {width: 400px;height: 200px;background: yellowgreen;}#prevBtn,#nextBtn {width: 20px;height: 20px;border-radius: 50%;top: 50%;transform: translateY(-50%);display: flex;justify-content: center;align-items: center;cursor: pointer;background-color: rgba(0, 0, 0, 0.3);}#prevBtn {position: absolute;left: 20px;z-index: 2;}#nextBtn {position: absolute;right: 20px;z-index: 2;}.controls {position: absolute;left: 50%;bottom: 20px;transform: translateX(-50%);z-index: 2;}.num-ul {list-style: none;padding: 0;margin: 0;display: flex;gap: 8px;}.num-ul li {width: 20px;height: 20px;border-radius: 50%;background-color: rgba(0, 0, 0, 0.3);display: flex;justify-content: center;align-items: center;}</style>

加上css 效果图如下:
在这里插入图片描述

js部分:利用js实现图片的切换,切换时下面的序号按钮的背景根据当前显示的图切换样式。

<script>let timer = null; // 定时器const slides = document.querySelectorAll(".slide"); // 图片容器const containerDom = document.getElementsByClassName("container")[0];var numUlDom = document.getElementsByClassName("num-ul")[0]; // 数字按钮父级容器var numList = document.getElementsByClassName("num-ul")[0].getElementsByTagName("li"); // 数字切换按钮列表let currentSlide = 0;// 设置图片的样式function showSlide(index) {slides[currentSlide].style.display = "none";numList[currentSlide].style.backgroundColor = ""; // 清空上一个按钮的样式currentSlide = (index + slides.length) % slides.length;numList[currentSlide].style.backgroundColor = "#ccc";slides[currentSlide].style.display = "block";}function nextSlide() {showSlide(currentSlide + 1);}function prevSlide() {showSlide(currentSlide - 1);}// 鼠标移入容器,停止自动播放containerDom.addEventListener("mouseenter", closeAutoShow);// 鼠标移出容器,开启自动播放containerDom.addEventListener("mouseleave", autoPlay);// 监听切换按钮document.getElementById("nextBtn").addEventListener("click", nextSlide);document.getElementById("prevBtn").addEventListener("click", prevSlide);// 数字按钮点击事件numUlDom.addEventListener("click", numClick);// 数字按钮点击事件function numClick(e) {// ulDom.style.transition = "0.5s";// 检查点击的目标是否是一个li元素if (e.target.tagName === "LI") {// 获取被点击的li元素的内容或索引const clickedItem = event.target;const clickedIndex = Array.from(numUlDom.children).indexOf(clickedItem);if (clickedIndex == undefined) {return;}console.log(currentSlide, clickedIndex);numList[currentSlide].style.backgroundColor = ""; // 清空上一个按钮的样式numList[clickedIndex].style.backgroundColor = "#ccc";showSlide(clickedIndex);}}// 定时器开始function autoPlay() {timer = setInterval(nextSlide, 3000);}// 定时器结束function closeAutoShow() {clearInterval(timer);}showSlide(0);// 自动播放autoPlay();</script>

在这里插入图片描述

总结

实现轮播图的方法多种多样,这里只是介绍其中一种。原理就都差不多,主要根据自己需求而定。

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

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

相关文章

JavaScript设计模式之发布-订阅模式

发布者和订阅者完全解耦&#xff08;通过消息队列进行通信&#xff09; 适用场景&#xff1a;功能模块间进行通信&#xff0c;如Vue的事件总线。 ES6实现方式&#xff1a; class eventManager {constructor() {this.eventList {};}on(eventName, callback) {if (this.eventL…

块级作用域的理解

块级作用于的概念 由一对花括号{}中的语句集都属于一个块&#xff0c;在这个{}里面包含的块内定义的所有变量在代码块外都是不可见的&#xff0c;因此称为块级作用域。 作用域永远都是任何一门语言的重中之中&#xff0c;因为它控制着变量和参数的可见性和生命周期。讲到这里&…

搭建第一个区块链网络与一键部署WeBASE步骤

官网 搭建第一个区块链网络 — FISCO BCOS v2 v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io) 一键部署 — WeBASE v1.5.5 文档 (webasedoc.readthedocs.io) 步骤 默认如MySQL、Python、java等依赖已经引入 1.创建操作目录, 下载安装脚本 创建操作目录 cd ~ &a…

​实现1个电脑打开多个微信​

实现1个电脑打开多个微信&#xff1a;1、快速双击打开微信&#xff0c;可打开多个微信。2、按住回车键&#xff0c;双击打开微信&#xff0c;并快速放开回车键即可打开多个微信。3、用命令符也可打开多个微信。4、建立一个批处理文件实现打开多个微信。 方法一&#xff1a;最简…

故障诊断模型 | Maltab实现SVM支持向量机的故障诊断

效果一览 文章概述 故障诊断模型 | Maltab实现SVM支持向量机的故障诊断 模型描述 Chinese: Options:可用的选项即表示的涵义如下   -s svm类型:SVM设置类型(默认0)   0 – C-SVC   1 --v-SVC   2 – 一类SVM   3 – e -SVR   4 – v-SVR   -t 核函数类型:核函…

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境 文章目录 CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境一、前言二、资料收集三、Ubuntu18.04从安装到更换实时内核1、下载安装Ubuntu18.042、下载安装实时内核&#xff0c;解决编…

如何卸载干净 IDEA(图文讲解)windows和Mac教程

大家好&#xff0c;我是sun~ 很多小伙伴会问 Windows / Mac 系统上要怎么彻底卸载 IDEA 呢&#xff1f; 本文通过图片文字&#xff0c;详细讲解具体步骤&#xff1a; 如何卸载干净 IDEA&#xff08;图文讲解&#xff09; Windows1、卸载 IDEA 程序2、注册表清理3、残留清理 M…

Openssl生成证书-nginx使用ssl

Openssl生成证书并用nginx使用 安装openssl yum install openssl -y创库目录存放证书 mkdir /etc/nginx/cert cd /etc/nginx/cert配置本地解析 cat >>/etc/hosts << EOF 10.10.10.21 kubernetes-master.com EOF10.10.10.21 主机ip、 kubernetes-master.com 本…

Android各版本对应的SDK及JDK版本要求

1、Android Gradle 插件版本说明 | Android 开发者 | Android Developers 2、 3、Android Gradle 插件 7.3.0&#xff08;2022 年 9 月&#xff09; | Android 开发者 | Android Developers 4、 5、参考 Android中Gradle版本和Gradle插件版本 - 简书

QCC TX 音频输入切换+提示声音

QCC TX 音频输入切换提示声音 QCC蓝牙芯片&#xff08;QCC3040 QCC3056 等等&#xff09;&#xff0c;AUX、I2S、USB输入 蓝牙音频输入&#xff0c;模拟输出是最常见的方式。 也可以再此基础上动态切换输入方式。 针对TX切换EQ,调节音量不能出提示声音问题&#xff0c;可以增…

路由器基础(八):策略路由配置

在实际网络应用中&#xff0c;策略路由也是一种重要的技术手段。尽管 在考试并不注重策略路由&#xff0c;但是实际上应用较多&#xff0c;建议考生除了掌握基本的静态路由协议IP route-static, 动态路由协议RIP 、OSPF的基础配置外&#xff0c;还要掌握如何配置策略路由。…

解决ECharts柱形图自定义单个柱子颜色图例无法显示

legend里data和series里的name需要对应series里对象需要设置stack属性&#xff0c;属性值都一样即可显示单柱重点在于series里对象data属性设置&#xff0c;必须使用&#xff0c;否则影响柱体上数值显示tooltip的值需要自定义&#xff0c;否则会显示堆叠柱状图的tooltip格式&am…