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";
            }
        }
    );
相关推荐
prinrf('千寻)2 小时前
MyBatis-Plus 的 updateById 方法不更新 null 值属性的问题
java·开发语言·mybatis
香蕉可乐荷包蛋2 小时前
浅入ES5、ES6(ES2015)、ES2023(ES14)版本对比,及使用建议---ES6就够用(个人觉得)
前端·javascript·es6
m0_555762902 小时前
Qt缓动曲线详解
开发语言·qt
未来之窗软件服务2 小时前
资源管理器必要性———仙盟创梦IDE
前端·javascript·ide·仙盟创梦ide
揽你·入怀3 小时前
数据结构:ArrayList简单实现与常见操作实例详解
java·开发语言
AA-代码批发V哥3 小时前
Math工具类全面指南
java·开发语言·数学建模
Nobkins3 小时前
2021ICPC四川省赛个人补题ABDHKLM
开发语言·数据结构·c++·算法·图论
十八年的好汉3 小时前
buck变换器的simulink/matlab仿真和python参数设计
开发语言·matlab
88号技师3 小时前
2025年6月一区SCI-不实野燕麦优化算法Animated Oat Optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
我不是程序猿儿3 小时前
【C#】Thread.Join()、异步等待和直接join
开发语言·c#