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";
            }
        }
    );
相关推荐
凡人的AI工具箱15 分钟前
40分钟学 Go 语言高并发:RPC服务开发实战
开发语言·后端·性能优化·rpc·golang
R6bandito_21 分钟前
Qt几何数据类型:QLine类型详解(基础向)
c语言·开发语言·c++·经验分享·qt
杭电码农-NEO24 分钟前
【lua语言基础(四)】IO模型以及补充知识
开发语言·junit·lua
是十一月末31 分钟前
Python语法之正则表达式详解以及re模块中的常用函数
开发语言·python·正则表达式
一只大侠32 分钟前
计算S=1!+2!+3!+…+N!的值:JAVA
java·开发语言
一只大侠35 分钟前
输入一串字符,以“?”结束。统计其中字母个数,数字个数,其它符号个数。:JAVA
java·开发语言·算法
Oneforlove_twoforjob35 分钟前
【Java基础面试题011】什么是Java中的自动装箱和拆箱?
java·开发语言
fury_12336 分钟前
当大的div中有六个小的div,上面三个下面三个,当外层div高变大的时候我希望里面的小的div的高也变大
前端·javascript·html
大鸡腿最好吃1 小时前
为啥react要用jsx
前端·javascript·react.js
优雅的落幕1 小时前
多线程---线程安全(synchronized)
java·开发语言·jvm