当前位置: 首页 > news >正文

JS的DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)

下面是是对dom操作的一个综合练习

下面代码是html的基本骨架(没有任何的功能):

<!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: 25%;  

            height: 40%; /* 根据需要设置高度 */

            border: 4px red solid;

            background-color: gray;

        }  

        .carousel-image {  

            width: 100%;  

            height: 100%;  

        }  

    </style>  

</head>  

<body>  

    <div class="carousel-container">  

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

    </div>

    <div class="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>

    <script>    

    </script>

</body>  

</html>

运行截图:

                                        

第一种功能是让4张图片实现自动轮播

一共可以有两种方式可以实现让它自动轮播的效果:

第一种:

<!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: 25%;  

            height: 40%; /* 根据需要设置高度 */

            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>

    <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>

    <script>  

        // 【实现自动轮播】

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

        var i = 1;

        // 修改img标签的图片路径

        function showNextImage1() {    

            if(i>4){

                i = 1;

            }else{              

                imgElement.src = `./img_src/p${i}.jpg`;

                i =  i + 1;

            }

        }    

// 每1秒切换一次图片 (无限循环)

        setInterval(showNextImage1, 1500);   

    </script>  

</body>  

</html>

第二种(把上面红色代码替换就行):

//【实现自动轮播】直接改整个父节点下节点(innerHTML实现)

         const divElement = document.getElementsByClassName("carousel-container")[0];

        var i = 1;

        function showNextImage2() {          

            if(i>4){

                i = 1;

            }else{    

                divElement.innerHTML = `<img src="./img_src/p${i}.jpg" class="carousel-image active" id="img1">`

                i =  i + 1;

            }    

        } 

运行截图(因作者个人技术原因,上传不去录屏,用截图代替):

               

第二种功能是实现四个按钮切换图片,以下为该功能代码:

<!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: 25%;  

            height: 40%; /* 根据需要设置高度 */

            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;

        }

        .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>

    <script>  

        // 【实现自动轮播】

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

        var i = 1;      

        // 修改img标签的图片路径

        function showNextImage1() {    

            if(i>4){

                i = 1;

            }else{              

                imgElement.src = `./img_src/p${i}.jpg`;

                i =  i + 1;

            }

        }  

        // 每1秒切换一次图片 (无限循环)

        setInterval(showNextImage1, 1500);  

        // 【实现四个按钮切换图片】

        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`;

            }

        )

    </script>  

</body>  

</html>

运行结果(点想看的张数可直接跳转到第几张):

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

第三种功能是实现回车键控制轮播,以下为该功能代码:

<!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: 25%;  

            height: 40%; /* 根据需要设置高度 */

            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: 15%;  

            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>  

        // 【实现自动轮播】

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

        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;

                }

            }

        }  

        // 每1秒切换一次图片 (无限循环)

        setInterval(showNextImage1, 1500);  



 

        // 【实现四个按钮切换图片】

        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`;

            }

        )


 

    // 【实现回车键控制轮播是否开启】   

   // 获取显示按键信息的元素

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

 // 监听整个文档的keydown事件 

    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>

运行结果(未按回车键版):

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         

运行结果(已按回车键版):

                                         

(注:若有疑问,可发评论,作者看到会回复) 

相关文章:

JS的DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)

下面是是对dom操作的一个综合练习 下面代码是html的基本骨架&#xff08;没有任何的功能&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" c…...

低温存储开关机问题

问题&#xff1a; 某消费电子产品在进行可靠性实验室&#xff0c;在低温-30C存储两个小时后&#xff0c;上电不开机。在常温25C时&#xff0c;开关机正常。 分析&#xff1a; 1、接串口抓log信息&#xff0c;从打印信息可以看出uboot可以起来&#xff0c;在跑kernel时&#x…...

mysql系列1—mysql架构和协议介绍

背景&#xff1a; 本文开始整理mysql相关的文章&#xff0c;用于收集数据库相关内容&#xff1b;包括mysql架构和存储方式、索引结构和查询优化、数据库锁等内容。思考如何根据具体的业务给出最优的分表规划和表设计、字段选择和索引设计、优化的SQL语句&#xff0c;以及数据库…...

设计模式——模板模式

定义与基本概念 模板模式&#xff08;Template Pattern&#xff09;是一种行为设计模式。它在一个抽象类中定义了一个操作的算法骨架&#xff0c;将一些步骤的实现延迟到具体子类中。这个抽象类就像是一个模板&#xff0c;定义了执行某个流程的基本框架&#xff0c;而具体的细…...

CV22_语义分割基础

1. 常见的分割类型 在计算机视觉领域&#xff0c;根据不同的应用场景和需求&#xff0c;分割任务可以分为几种主要类型。以下是几种常见的分割类型&#xff1a; 语义分割&#xff08;Semantic Segmentation&#xff09;&#xff1a; 语义分割的目标是将图像中的每个像素分配到…...

Dubbo源码解析-Dubbo的线程模型(九)

一、Dubbo线程模型 首先明确一个基本概念&#xff1a;IO 线程和业务线程的区别 IO 线程&#xff1a;配置在netty 连接点的用于处理网络数据的线程&#xff0c;主要处理编解码等直接与网络数据 打交道的事件。 业务线程&#xff1a;用于处理具体业务逻辑的线程&#xff0c;可以…...

【Canvas与标志】圆角三角形生化危险警示标志

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>圆角三角形生化危险警示标志 Draft1</title><style type&qu…...

解决Dcat Admin laravel框架登录报错问题,(blocked:mixed-content)

前言 在使用 Dcat Admin 后台登录时&#xff0c;发生 error 报错&#xff1a;(blocked:mixed-content) xhr VM484:1&#xff0c;浏览器拦截 其实这是浏览器在 HTTPS 页面中尝试加载 HTTP 资源&#xff0c;导致浏览器阻止了这些不安全的请求。 解决 在 .env 文件中添加或修改 AD…...

(三)Sping Boot学习——升级jdk1.8-jdk18

1.修改系统环境变量。 2.idea中修改配置。 3.项目setting中设置修改 4.更新后还要重新下载依赖mvn clean install &#xff0c;并且记住reload 项目。同时查看java -version查看一下jdk版本。...

语言模型中的多模态链式推理

神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…...

SCons:下一代构建工具,如何用 Python 驱动高效构建?

在现代软件开发中&#xff0c;构建工具是开发流程中不可或缺的一环。无论是小型项目还是跨平台的复杂工程&#xff0c;选择一个高效、灵活的工具都能显著提高开发效率和代码质量。SCons&#xff0c;一个以 Python 为基础的构建工具&#xff0c;通过自动化依赖管理、灵活的扩展性…...

springboot 整合 rabbitMQ (延迟队列)

前言&#xff1a; 延迟队列是一个内部有序的数据结构&#xff0c;其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间&#xff0c;意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之&#xff0c;延时队列被设计用于存放那…...

ES 基本使用与二次封装

概述 基本了解 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了对海量数据的快速全文搜索、结构化搜索和分析功能&#xff0c;是目前流行的大数据处理工具之一。主要特点即高效搜索、分布式存储、拓展性强 核心功能 全文搜索:…...

分割一切2.0,SAM2详解

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月24日20点03分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...

Spring AI Fluent API:与AI模型通信的流畅体验

引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;越来越多的应用场景开始融入AI技术以提升用户体验和系统效率。在Java开发中&#xff0c;与AI模型通信成为了一个重要而常见的需求。为了满足这一需求&#xff0c;Spring AI引入了ChatClient&#xff0c…...

基于python的长津湖评论数据分析与可视化,使用是svm情感分析建模

引言 研究背景及意义 上世纪初开始&#xff0c;中国电影就以自己独有的姿态登上了世界电影史的舞台。中国电影作为国家文化和思想观念的反映与延伸&#xff0c;能够增强文化自信&#xff0c;在文化输出方面有着极其重要的作用1[1]。 改革开放以来&#xff0c;随着生产力的提高…...

Lucene(2):Springboot整合全文检索引擎TermInSetQuery应用实例附源码

前言 本章代码已分享至Gitee: https://gitee.com/lengcz/springbootlucene01 接上文。Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码 如何在指定范围内查询。从lucene 7 开始&#xff0c;filter 被弃用&#xff0c;导致无法进行调节过滤。 TermInSetQuery 指定…...

shell完结

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

【2024最新】基于Springboot+Vue的智慧食堂系统Lw+PPT

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…...

NVR小程序接入平台EasyNVR多品牌NVR管理工具:高效管理分散视频资源的解决方案

在当今数字化、智能化的时代背景下&#xff0c;视频监控已成为各行各业不可或缺的一部分&#xff0c;从公共安全到企业运维&#xff0c;再到智慧城市建设&#xff0c;视频资源的管理与应用正面临着前所未有的挑战。如何高效整合、管理这些遍布各地的分散视频资源&#xff0c;成…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...