利用JS实现图片轮播(示例)

我们平时在逛购物网站的时候会看到页面内的商品图片自动轮播,二要想实现着中效果应该如何做呢?下面详细讲解代码的运用,实现下面视频的效果。大家也可以自己试试看,或者复制最后的完整代码运行一下!

图片自动轮播效果

要实现主动轮播效果需要用到的内容有:CSS样式设置、CSS样式布局、获取节点、解决高度塌陷问题、键盘监听事件,不清楚的可以点击文字跳转相应博客学习。

一、整体结构

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

设置相对定位和固定宽度,这使用到了CSS页面布局的内容,利用百分比设置图片的位置,为了方便观看,我给这个容器设置了边框。

<head>
<style>.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 */  }  
</style>
</head><body>
<div class="carousel-container">  <img src="./img_src/p1.jpg" class="carousel-image" id="img1">  </div> 
</body>

代码运行效果如上图,大家可以根据实际需求调整大小、样式等内容

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

这里我使用四个<p>元素设置,在后面将该元素假设为切换图片的按钮

<head><style>.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;}</style></head><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键可以停止轮播,要设置一个区域显示图片轮播的状态信息,如“图片轮播关闭……”,通过绝对定位放置在页面特定位置,有红色背景、白色文本和边框半径。

<head><style>#output {  color: white;background-color: red; text-align: center;width: 50%;  height: 3%; margin-top: 1%;      position: relative;left: 5%;   border-radius: 10px;} </style></head><body><div id="output">图片轮播关闭......(按Enter键开启轮播)</div></body>

效果图如下:

这样一个基本的框架就已经出来了

 二、实现各种效果

实现这些效果,我利用JS来实现

1、实现主动轮播

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

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

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

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

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

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

(1)在前面说到要假设<p>元素为按钮,我们就要先获取该元素

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

 (2)为四个按钮添加事件监听

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

当第一个 <p> 元素被点击时,将 i 设置为 1,并将图片元素的 src 属性设置为第一张图片的路径。 同理,当第二、三、四个 <p> 元素被点击时,分别将 i 设置为 2、3、4,并设置相应的图片路径。

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、实现点击Enter键控制轮播是否开启

(1)与前面一致,先获取显示提示信息的元素

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

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

document.addEventListener('keydown',  // 监听整个文档的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";}});

(3)根据 scroll_img 的值来设置提示信息和背景颜色。(代码结合在(2)里面)

如果 scroll_img 为 true,表示图片轮播开启,将输出区域的文本内容设置为“图片轮播开启......(按 Enter 键关闭轮播)”,并将背景颜色设置为绿色。

如果 scroll_img 为 false,表示图片轮播关闭,将输出区域的文本内容设置为“图片轮播关闭......(按 Enter 键开启轮播)”,并将背景颜色设置为红色。

利用这些代码即可实现图片自动轮播的效果,完整代码如下:

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <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/9994.html

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

相关文章

关于99.9% 达成读码率方案

1.标签样式 2.尺寸大小 长30mm*宽30mm 至 长40mm*宽40mm ; 3.位置 标签位置在箱体中间,可以误差5mm; 4.质量要求 ①无遮挡,标签不允许任何介质在上面,尤其是塑料片 ②平整,必须和箱子壁贴平,不允许翻边,飘荡。 ③码不能有模糊,手机摄像头扫码可以…

w~视觉~合集20~SAM

我自己的原文哦~ https://blog.51cto.com/whaosoft/12500982 #SAM 今天&#xff0c;Meta发布史上首个图像分割基础模型SAM&#xff0c;将NLP领域的prompt范式引进CV&#xff0c;让模型可以通过prompt一键抠图。网友直呼&#xff1a;CV不存在了! 就在刚刚&#xff0c;Meta AI…

三、直流有刷电机H桥驱动原理

1、H桥简介 H桥驱动电路&#xff1a;是一种用于控制直流电机正反转及速度的电路&#xff0c;其名称来源于其电路结构类似于字母“H”。H桥驱动电路由四个开关元件&#xff08;如晶体管、MOSFET等&#xff09;组成&#xff0c;这些开关元件被配置成可以控制电机两端电流的方向&…

Leetcode刷题

题目如下&#xff1a; 这道题呢&#xff0c;这里我写出了两种解决办法&#xff0c;一种遍历链表来得出中间结点&#xff0c;一种通过快慢指针来得出中间结点 第一种&#xff1a; 遍历&#xff1a; 首先我们设置一个计数器count&#xff0c;来记录链表的长度&#xff0c;写一…

游戏开发--C#面试题

游戏开发--C#面试题 C#1. 值类型和引用类型的区别2. 重载和重写的区别3. ArrayList和List的区别4. List底层是什么实现的&#xff1f;5. 抽象类和接口的区别6. 静态成员和⾮静态成员的区别7. 装箱和拆箱是指什么&#xff1f;8. 值和引用类型在变量赋值时的区别是什么&#xff1…

# 设置ubuntu为中文后,如何保留用户家目录等文件夹名为英文

设置ubuntu为中文后&#xff0c;如何保留用户家目录等文件夹名为英文 一、问题描述&#xff1a; 当我们安装完ubuntu系统后&#xff0c;通过【系统设置】&#xff0c;在【语言支持】里&#xff0c;设置为【汉语&#xff08;中国&#xff09;】&#xff0c;这时在终端中显示文…

STM32—独立看门狗(IWDG)和窗口看门狗(WWDG)

概述&#xff1a; WDG(Watchdog) 看门狗&#xff0c;看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能计时复位程序&#xff0c;避免程序陷入长时间的罢工状态&#xff0c;保证系…

Chrome与火狐哪个浏览器的性能表现更好

在数字时代&#xff0c;浏览器是我们日常生活中不可或缺的工具。无论是工作、学习还是娱乐&#xff0c;一个好的浏览器都能显著提高我们的效率和体验。市场上有许多优秀的浏览器&#xff0c;其中Google Chrome和Mozilla Firefox无疑是最受欢迎的两款。本文将比较这两款浏览器的…

现在国内优秀的广告联盟有哪些?

广告联盟是网络广告效果营销的主流方式之一&#xff0c;广告联盟的变现方式多种多样&#xff0c;主要有以下四种 CPA&#xff1a;按照下载或者注册进行付费&#xff08;软件平台或游戏试玩平台&#xff09;CPS&#xff1a;按照成交进行付费&#xff08;淘宝客&#xff09;CPM&…

机器学习,生成式AI ,LLM大模型,人工智能,他们之间的关系是什么?有什么不同?

这些概念都是现代计算机科学和人工智能领域的重要组成部分&#xff0c;它们之间既有联系&#xff0c;也有区别。以下是它们的关系和不同之处&#xff1a; 人工智能 (AI) 两个回答 人工智能是一个广义的概念&#xff0c;指的是计算机系统能够执行通常需要人类智能才能完成的任务…

[全网最细数据结构完整版]第七篇:3分钟带你吃透队列

目录 1->队列的概念及结构 2->队列的实现 2.1定义队列基本结构 struct QueueNode 和 struct Queue 2.2队列初始化函数 QueueInit 函数 2.3队列销毁函数 QueueDestroy 函数 2.4队列插入数据函数 QueuePush 函数 2.5判断队列是否为空,空返回true,非空返回false 2.6队列删…

点阵数显驱动IC数显LED驱动芯片VK1651

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK1651 封装形式&#xff1a;SOP16 产品年份&#xff1a;新年份 产品简介&#xff1a;VK1651是一种带键盘扫描电路接口的 LED 驱动控制专用芯片&#xff0c;内部集成有数据锁存器、LED 驱动、键盘扫描等电路。SEG脚…

【进阶】java基础之集合(2)数据结构<树>

文章目录 二叉树的内部结构二叉查找树平衡二叉树平衡二叉树的旋转机制 二叉树的内部结构 二叉查找树 二叉查找树&#xff0c;又称二叉排序树或者二叉搜索树 特点: 每一个节点上最多有两个子节点任意节点左子树上的值都小于当前节点任意节点右子树上的值都大于当前节点 二叉…

积分接口被刷爆,全体一个月降薪20%,这个项目我们遗漏了什么?

有一些往事总是会在酒后提起 我问朋友&#xff0c;在工作上有什么事情是到现在还记忆尤新的&#xff1f; 我朋友一个激灵坐起来&#xff0c;点上一支烟&#xff0c;只见烟头亮了4、5下&#xff0c;才见他吐出一口烟来&#xff0c;说道&#xff1a;“那还真有” 起因 刚参加…

AWTK-LINUX-FB实现多点触摸

两周前的一个地图&#xff0c;需要做手势缩放的功能&#xff0c;比较忙就没有发出来&#xff0c;这次抽时间记录一下实现的过程。 AWTK官方有对实现多点触摸做过描述&#xff0c;可惜只有STM32的实现例子&#xff0c;跟Linux的差别还是比较大的&#xff0c;好在tslib有多点触摸…

NRF52832学习笔记(41)——添加串口库libuarte

一、背景 由于板子上不支持硬件流控&#xff0c;在使用 app_uart_fifo 库接收串口大数据时&#xff0c;频繁报 APP_UART_COMMUNICATION_ERROR 错误&#xff0c;多次重新初始化后&#xff0c;串口也不再产生中断了。查看官方论坛后决定使用串口异步库 libuarte。 二、简介 Li…

ORU 的 Open RAN 管理平面 (M 平面)

[TOC](ORU 的 Open RAN 管理平面 (M 平面)) ORU 的 Open RAN 管理平面 (M 平面) https://www.techplayon.com/open-ran-management-plane-m-plane-for-open-radio-unit/ ORU M 平面 在 ORAN 中&#xff0c;设置参数的 O-RU 管理功能是通过 M-Plane 完成的。管理功能包括 O-…

MQ的基础知识

一.什么是MQ 其实就是不同的程序之间的一种的通信方式,通过将消息发送到中间件里面然后中间件就会将这个消息发送给相应的服务进行一个消息的消费,这个时候就会进行一些的业务逻辑的处理,这个方式提高了整个系统的可靠性,拓展性以及灵活性.常见的类型为Aapache Kafaka&#xf…

蓝牙OPP协议详解及Android实现

文章目录 前言一、什么是蓝牙OPP协议&#xff1f;二、OPP协议工作流程1. 设备配对和连接2. 启动 OPP 服务3. 发送对象4. 传输对象5. 传输完成6. 断开连接 三、 Android OPP协议实现1. 启动 OPP 服务器&#xff08;接收方&#xff09;2. 发送文件&#xff08;发送方&#xff09;…

医学可视化之涟漪图

在医学领域&#xff0c;数据可视化能够帮助我们更直观地理解和分析复杂的信息。涟漪图作为一种独特的可视化工具&#xff0c;具有重要的作用、价值和广泛的使用场景。 一、涟漪图的特点 涟漪图是一种基于地理位置的可视化图表&#xff0c;它通过在地图上显示不同大小或颜色的…