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

#如何去实现图片轮播效果图,通过创建一个基本的 HTML 页面结构,包含用于展示轮播图片的区域、左右切换箭头以及放置轮播图片的容器。#

整体架构

一、CSS 样式

  • 接下来创建一个 styles.css 文件来设置页面的样式,让轮播效果看起来更美观。定义两个盒子储存照片,三个按钮。
javascript 复制代码
<!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/s1.webp" 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>  
    </div>
    <script>
        
    </script>

</body>  
</html>

代码运行后如下:

二、JavaScript 代码

1. 实现自动轮播

  • 创建一个 script.js 文件来实现自动轮播的动态效果,包括自动切换图片。
  • 通过document.getElementById("") 去获取图片的 id 属性,if 循环图片,开始图片的大小为1,跳到 else 里,逐一轮播循环增加,增加到4则会等于1,重新轮播。
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 */  
        }  
    </style>  
</head>  
<body>  

    <div class="carousel-container">  
        <img src="./img_src/s1.webp" class="carousel-image" id="img1">  
    </div> 

    <div  class="clear_ele change-image">
        <p class="button"  id="s1">第1张</p>
        <p class="button"  id="s2">第2张</p>
        <p class="button"  id="s3">第3张</p> 
    </div>
    <script>  

        // 【实现自动轮播】
        const imgElement = document.getElementById("img1"); 
        var i = 1;
        // 修改img标签的图片路径
        function showNextImage1() {     

            if(i>3){
                i = 1;
            }else{               
                imgElement.src = `./img_src/s${i}.webp`;
                i =  i + 1;
            } 
        }    
        setInterval(showNextImage1, 1500);   // 每1秒切换一次图片 (无限循环)

    </script>  
</body>  
</html>

代码运行后如下:

  • 通过修改整个父节点下节点(innerHTML实现),通过获得 id 属性实现循环的效果
javascript 复制代码
    【实现自动轮播】 方案二:直接改整个父节点下节点(innerHTML实现)
    const divElement = document.getElementsByClassName("carousel-container")[0];
    var i = 1;
    function showNextImage2() {           
        if(i>3){
            i = 1;
        }else{     
            divElement.innerHTML = `<img src="./img_src/p${i}.jpg" class="carousel-image active" id="img1">`
          i =  i + 1;
         }     
     } 

2. 隔秒自动轮播

javascript 复制代码
每1秒切换一次图片 (无限循环)
setInterval(showNextImage1, 1500); 

3.实现四个按钮切换图片

  • 获得元素属性,为四个按钮添加事件监听,通过click点击属性,点击一次i=1,图片路径i=1,点击两次i=2,注意类推,获取每次点击获得的图片。
javascript 复制代码
        // 【实现四个按钮切换图片】
        const p = document.getElementsByTagName("p");
        p[0].addEventListener("click",
            function(){
                i = 1;
                imgElement.src = `./img_src/s${i}.webp`;
            }
        )

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

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

4.实现回车键控制轮播是否开启

获取显示按键信息的元素
javascript 复制代码
const outputDiv = document.getElementById('output'); 
  • 监听整个文档的keydown事件,获取按键的代码(包括数字键和特殊键,如箭头键、功能键等),将提示信息添加到输出区域.
javascript 复制代码
    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";
            }
        }
    );
相关推荐
小陈同学呦2 小时前
前端如何处理订单状态导航的数据竞态问题
前端·javascript
开发者每周简报2 小时前
网海三部曲·无名宗师传
javascript·人工智能
isyangli_blog2 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008113 小时前
FastAPI APIRouter
开发语言·python
Benszen3 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆3 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木3 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
杨充3 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法
噜噜噜阿鲁~3 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
basketball6163 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang