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";
            }
        }
    );
相关推荐
LinDaiuuj12 分钟前
编程中,!! 双感叹号的理解
前端·javascript
samroom16 分钟前
ES6规范新特性总结
前端·javascript·es6
大刘讲IT27 分钟前
构建实时、融合的湖仓一体数据分析平台:基于 Delta Lake 与 Apache Iceberg
开发语言·python·sql·mysql·数据挖掘·数据分析·json
前端Hardy39 分钟前
HTML&CSS:这个复选框打几分?
javascript·css·html
前端Hardy40 分钟前
HTML&CSS:领导说这个开关能打99.99分
javascript·css·html
PW41 分钟前
万字总结腾讯一面——现在的面试越来越注重效率了
前端·javascript·面试
DarkLONGLOVE1 小时前
巧用自定义属性:清除非内部事件点击的会话存储数据
前端·javascript
就是我1 小时前
怎么用React Native预加载解决白屏问题
前端·javascript·react.js
冯韶晗1 小时前
Scala语言的区块链
开发语言·后端·golang
码路老默0071 小时前
fabric.js基础使用
运维·javascript·fabric