当前位置: 首页 > 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;成…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

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

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

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...