DOM操作和事件监听综合练习:利用JS实现图片轮播

我们经常会看到购物网页上有商品图片在自动循环播放,这就是图片轮播,图片轮播‌是一种常见的网页设计元素,用于在网页上自动切换显示多张图片或内容。它通过JavaScript来实现图片的自动轮播效果,结合HTML和CSS来完成布局和样式设置。如下效果:

20241110_150122

以上就是图片轮播的效果,下面详细讲解代码的运用,实现上面视频的效果。大家也可以自己试试看,或者复制最后完整代码试试吧!

一、HTML部分

在HTML中创建一个包含轮播图的容器,通常使用<div>元素,并为其添加一个唯一的ID

1、设置一个div容器用于显示图片的区域

<body>  <div class="carousel-container">  <img src="./img_src/p1.jpg" class="carousel-image" id="img1">  </div> 
</body>

2、设置图片按钮切换区域

<body>  <div  class="clear_ele change-image"><p class="button"  id="p1">第1张</p><p class="button"  id="p2">第2张</p><p class="button"  id="p3">第3张</p><p class="button"  id="p4">第4张</p>   </div>
</body>

3、设置提示信息区域

为了让用户可以知道点击Enter键可以停止轮播,要设置一个区域显示图片轮播的状态信息。

<body>  <div id="output">图片轮播关闭......(按Enter键开启轮播)</div></body>

 HTML部分基本结构就完成了,代码如下:

<body>  <div class="carousel-container">  <img src="./img_src/p1.jpg" class="carousel-image" id="img1">  </div> <div  class="clear_ele change-image"><p class="button"  id="p1">第1张</p><p class="button"  id="p2">第2张</p><p class="button"  id="p3">第3张</p><p class="button"  id="p4">第4张</p>   </div><div id="output">图片轮播关闭......(按Enter键开启轮播)</div></script>  
</body>

 二、‌CSS样式‌

通过CSS对容器和列表进行布局和样式设置,例如设置容器的宽度、高度、背景色等,并设置列表项的宽度和高度,以及布局方式。

代码如下:

<style>  body, html {  margin: 0;  padding: 0; width: 100%; height: 100%;  }  .carousel-container {  position: relative;  width: 50%;  height:55%; /* 根据需要设置高度 */ border: 4px red solid;background-color: gray;}  .carousel-container .carousel-image {  position: absolute;  top: 0;  left: 0;  width: 100%;  height: 100%;  opacity: 1; /* 不透明度0-1 */  }  .change-image{width: 15%;  height: 3%;  /* border: 1px purple solid; */position: absolute;top: 30%;left: 5%;}.change-image .button{        width: 60px;  height: 30px;color: white;text-align: center;background-color: red;border-radius: 10px;margin-left: 9px;float: left;}#output {  color: white;background-color: red; text-align: center;width: 20%;  height: 3%; margin-top: 1%;      position: relative;left: 5%;   border-radius: 10px;} .clear_ele::after{content: "";  /* 这个伪元素的内容属性必须有 */display: block;/* border: 6px purple dashed; */clear: both;}

 效果如下:

三、‌JavaScript代码‌

使用JavaScript来实现轮播图的功能。 

1、实现主动轮播


(1)获取图片元素和初始化变量,获取id为img1的图片元素

const imgElement = document.getElementById("img1"); 

(2)定义自动切换图片的函数。定义变量scroll_img并初始化为false,用于控制自动轮播的开启和关闭状态,定义一个自动轮播的函数,当showNextImage1函数在scroll_img为true时执行图片切换逻辑

function showNextImage1() {     if(scroll_img){if(i>4){i = 1;}else{               imgElement.src = `./img_src/p${i}.jpg`;i =  i + 1;} }}  

其中,如果 i 大于 4,将 i 重置为 1,实现循环切换。否则,根据当前的 i 值设置图片元素的 src 属性为 ./img_src/p${i}.jpg,然后 i 的值加 1,切换到下一张图片。

(3)设置每1秒切换一次图片 (无限循环)

 setInterval(showNextImage1, 500);

2、实现四个按钮切换图片

(1)获取元素

const p = document.getElementsByTagName("p");

 (2)为四个按钮添加事件监听, click:单击鼠标时触发

p[0].addEventListener("click",function(){i = 1;imgElement.src = `./img_src/p${i}.jpg`;})p[1].addEventListener("click",function(){i = 2;imgElement.src = `./img_src/p${i}.jpg`;})p[2].addEventListener("click",function(){i = 3;imgElement.src = `./img_src/p${i}.jpg`;})p[3].addEventListener("click",function(){i = 4;imgElement.src = `./img_src/p${i}.jpg`;})

3、实现回车键控制轮播是否开启

(1)获取显示提示信息的元素

 const outputDiv = document.getElementById('output'); 

(2)添加键盘按下事件监听

document.addEventListener('keydown',  function(event) {              const keyCode = event.key; if(keyCode==="Enter"){scroll_img = !scroll_img;      } if (scroll_img) {outputDiv.textContent = "图片轮播开启......(按Enter键关闭轮播)";outputDiv.style.backgroundColor = "green";} else {outputDiv.textContent = "图片轮播关闭......(按Enter键开启轮播)";outputDiv.style.backgroundColor = "red";}}

把以上全部代码结合在一起,就能实现简单的图片轮播,代码如下:(快复制代码试试吧)

<!DOCTYPE html>  
<html lang="en">  
<head>  <title>图片自动切换(轮播图效果)</title>  <style>  body, html {  margin: 0;  padding: 0; width: 100%; height: 100%;  }  .carousel-container {  position: relative;  width: 50%;  height:55%; /* 根据需要设置高度 */ border: 4px red solid;background-color: gray;}  .carousel-container .carousel-image {  position: absolute;  top: 0;  left: 0;  width: 100%;  height: 100%;  opacity: 1; /* 不透明度0-1 */  }  .change-image{width: 15%;  height: 3%;  /* border: 1px purple solid; */position: absolute;top: 30%;left: 5%;}.change-image .button{        width: 60px;  height: 30px;color: white;text-align: center;background-color: red;border-radius: 10px;margin-left: 9px;float: left;}#output {  color: white;background-color: red; text-align: center;width: 20%;  height: 3%; margin-top: 1%;      position: relative;left: 5%;   border-radius: 10px;} .clear_ele::after{content: "";  /* 这个伪元素的内容属性必须有 */display: block;/* border: 6px purple dashed; */clear: both;}</style>  
</head>  
<body>  <div class="carousel-container">  <img src="./img_src/p1.jpg" class="carousel-image" id="img1">  </div> <div  class="clear_ele change-image"><p class="button"  id="p1">第1张</p><p class="button"  id="p2">第2张</p><p class="button"  id="p3">第3张</p><p class="button"  id="p4">第4张</p>   </div><div id="output">图片轮播关闭......(按Enter键开启轮播)</div><script>  // 【实现自动轮播】//1、获取图片元素和初始化变量,获取id为img1的图片元素const imgElement = document.getElementById("img1"); //1为当前显示的图片序号var i = 1;var scroll_img = false;//2、定义自动切换图片的函数function showNextImage1() {     if(scroll_img){if(i>4){i = 1;}else{               imgElement.src = `./img_src/p${i}.jpg`;i =  i + 1;} }}  // 每1秒切换一次图片 (无限循环)setInterval(showNextImage1, 500);  // 【实现四个按钮切换图片】const p = document.getElementsByTagName("p");//为四个按钮添加事件监听p[0].addEventListener("click",function(){i = 1;imgElement.src = `./img_src/p${i}.jpg`;})p[1].addEventListener("click",function(){i = 2;imgElement.src = `./img_src/p${i}.jpg`;})p[2].addEventListener("click",function(){i = 3;imgElement.src = `./img_src/p${i}.jpg`;})p[3].addEventListener("click",function(){i = 4;imgElement.src = `./img_src/p${i}.jpg`;})// 【实现回车键控制轮播是否开启】    //1、获取显示提示信息的元素const outputDiv = document.getElementById('output'); //2、添加键盘按下事件监听document.addEventListener('keydown',  function(event) {              const keyCode = event.key; if(keyCode==="Enter"){scroll_img = !scroll_img;      } if (scroll_img) {outputDiv.textContent = "图片轮播开启......(按Enter键关闭轮播)";outputDiv.style.backgroundColor = "green";} else {outputDiv.textContent = "图片轮播关闭......(按Enter键开启轮播)";outputDiv.style.backgroundColor = "red";}});</script>  
</body>  
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Spark 新作《循序渐进 Spark 大数据应用开发》简介

《循序渐进Spark大数据应用开发》由清华大学出版社出版&#xff0c;已于近期上市。该书基于Spark 3.5.1编写&#xff0c;提供24个实战案例26个上机练习&#xff0c;可谓是目前市面上最新的Spark力作。 本文对《循序渐进Spark大数据应用开发》一书做个大致的介绍。 封面部分 …

【王木头】最大似然估计、最大后验估计

目录 一、最大似然估计&#xff08;MLE&#xff09; 二、最大后验估计&#xff08;MAP&#xff09; 三、MLE 和 MAP 的本质区别 四、当先验是均匀分布时&#xff0c;MLE 和 MAP 等价 五、总结 本文理论参考王木头的视频&#xff1a; 贝叶斯解释“L1和L2正则化”&#xff…

算法|牛客网华为机试41-52C++

牛客网华为机试 上篇&#xff1a;算法|牛客网华为机试21-30C 文章目录 HJ41 称砝码HJ42 学英语HJ43 迷宫问题HJ44 SudokuHJ45 名字的漂亮度HJ46 截取字符串HJ48 从单向链表中删除指定值的节点HJ50 四则运算HJ51 输出单向链表中倒数第k个结点HJ52 计算字符串的编辑距离 HJ41 称砝…

【国产桌面操作系统开发】制作桌面快捷方式

前言 目前使用最广的国产桌面操作系统是麒麟kylin操作系统和统信UOS操作系统&#xff0c;在国产系统上开发应用&#xff0c;需要在桌面提供一个快捷方式给用户使用&#xff0c;国产系统是Linux阵营&#xff0c;与window系统是有差异的。 国产系统桌面 国产系统桌面是一个xxx.d…

AndroidStudio-常用布局

一、线性布局LinearLayout 线性布局内部的各视图有两种排列方式: 1.orientation属性值为horizontal时&#xff0c;内部视图在水平方向从左往右排列。 2.orientation属性值为vertical时&#xff0c;内部视图在垂直方向从上往下排列。 如果不指定orientation属性&#xff0c;…

UEditor(百度开源的在线编辑器,修改版)

dc-UEditor&#xff0c;rich text 富文本编辑器&#xff0c;基于百度UEditor 1.4.3.3-utf8-php版修改。 修复了Uploader.class.php的安全隐患。 新增了以下功能&#xff1a; 1、上传图片是否加水印。 2、新增了单独调用上传的接口。 3、表情本地化&#xff0c;预防百度UEd…

Docker安装部署RabbitMQ

1. Docker环境准备 1.1 安装Docker 在开始Docker安装部署RabbitMQ之前&#xff0c;确保您的系统环境已经满足Docker的运行要求。以下是在不同操作系统上安装Docker的步骤和命令行演示。 对于Linux系统 在基于Debian的系统&#xff08;如Ubuntu&#xff09;上&#xff0c;您…

通义千问API调用测试 (colab-python,vue)

文章目录 代码&#xff08;来自官网&#xff09;colab中用python测试Qwen2.5在官网上查看并确定过期时间这里看到我的免费额度到25年5月在同一个页面&#xff0c;点击API示例 前端调用直接在前端调用的优缺点以vue为例&#xff08;代码是基于官网node.js的代码转换而来&#xf…

BLDC基础知识复习【一】

焊接DDR的时候用镊子轻轻抖动一下&#xff0c;能晃动后复位代表焊接成功&#xff1b;用棉签和洗板水清洗板子&#xff0c;不要用纸擦 无刷没有定子和换向器&#xff0c;转子和定子反过来了&#xff1a; KV值越大&#xff0c;电机转速越大。电机转速 KV * 供电电压 外转子电机…

鸿蒙UI开发——自定义UI绘制帧率

1、概 述 随着设备屏幕的不断演进&#xff0c;当前主流设备采用LTPO屏幕&#xff08;可变刷新率屏幕&#xff09;&#xff0c;此类屏幕支持在多个档位之间切换屏幕帧率。 对于快速变化的内容&#xff0c;如射击游戏&#xff0c;交互动画等&#xff0c;显示帧率越高&#xff0…

递归写斐波那契数

在思考一些C语言编程题的解法时我们经常会碰到的一种算法是递归&#xff0c;递归的字面意思是传递回归&#xff0c;会用例子来解释和运用。 递归 例&#xff1a;在控制台输出指定项数的斐波那契数 斐波那契数列数列是指&#xff1a;1,1,2,3,5,8,13,21,34......从第三项开始等…

手写JDK动态代理实现AOP

AOP底层&#xff1f; AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;在 Java 中的实现有多种方式&#xff0c;其中使用 JDK 动态代理和 CGLIB 代理较为常见。 当你的应用程序遵循面向接口编程的原则时&#xff0c;JDK 动态代理是一个自然的…

Gin框架

GoWeb框架 GIN框架 基于httprouter开发的Web框架 安装与使用 安装 下载并安装GIN go get -u github.com/gin-gonic/gin 示例 package mainimport ("github.com/gin-gonic/gin" )func main() {// 创建一个默认的路由引擎r : gin.Default()// GET&#xff1a;请…

nodejs - nodejs安装步骤

安装 NodeJS 1.下载 NodeJS下载官网&#xff1a;https://nodejs.cn/download/ 2.验证 下载后解压安装&#xff0c;运行如下命令验证安装是否成功&#xff1a; node -v npm -v3.查看默认存放位置 查看npm默认存放位置&#xff0c;运行命令如下&#xff1a; npm get prefix…

Spring Boot框架:计算机课程管理的工程认证之光

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足&#xff0c;创建了一个计算机管理基于工程教育认…

游戏设计:推箱子【easyx图形界面/c语言】

在之前写程序设计的大作业时&#xff0c;在哔哩哔哩上跟着一个视频的学习的成果【第一个练习的】 今天整理文件的时候看到的&#xff0c;就发出来一下【CSDN和B站都有详细教程】 不是大项目&#xff0c;只有两个界面 这个代码只有两百行不到&#xff0c;但通过这个把基本的运…

C++数学

前言 C算法与数据结构 打开打包代码的方法兼述单元测试 数论&#xff1a;质数、最大公约数、菲蜀定理 组合数学汇总 计算几何 博弈论 曼哈顿距离与切比雪夫距离 红线是哈曼顿距离&#xff0c;绿线是切比雪夫距离。 二维曼哈顿距离转切比雪夫距离 曼哈顿距离&#xff1a;|…

如何安装VMWare Workstation 16虚拟机

1、到VMware官网下载安装包。 2、下一步。 3、勾选同意协议&#xff0c;下一步。 4、更换安装路径&#xff0c;下一步。 5、取消全部勾选&#xff0c;下一步。 6、下一步。 7、安装。 8、等待安装完成。 9、安装完成&#xff0c;启动软件。 10、输入许可证ZF3R0…

光流分析技术

光流分析技术是一种重要的计算机视觉和图像处理技术&#xff0c;它通过分析连续帧图像中像素点的运动轨迹和速度&#xff0c;来捕捉图像中物体的运动和相邻帧之间的位移信息。以下是对光流分析技术的详细介绍&#xff1a; 一、光流的基本概念 光流&#xff08;Optical Flow&am…

Bearer 和 Digest 两个区别

Bearer 和 Digest 是两种常见的身份验证机制,主要用于在网络通信中验证用户的身份,以下是它们之间的区别: 认证原理 Bearer:也称为承载令牌认证,其核心是使用一个令牌(Token)来代表用户的身份信息。用户在进行身份验证后,服务器会颁发一个令牌给客户端,客户端在后续…