JavaScript综合案例五

news/2024/7/24 10:23:06 标签: 前端, javascript

目录

一、实战案例:轮播图案例-完整版

代码实现

二、实战案例:tab栏切换

1.普通版本

代码实现

2.事件委托版本

代码实现

三、实战案例:表单全选反选

代码实现

四、实战案例:哔哩哔哩导航滑动

代码实现

五、实战案例:多功能电梯导航栏

代码实现


一、实战案例:轮播图案例-完整版

需求:每隔一秒自动切换一个图片和标题、小圆点颜色,并且可以自己选择上一张还是下一张

分析:

1.准备一个数组对象,存储详细信息

2.获取元素对象

3.设置间歇函数,定时修改图片和标题小圆点

4.处理图片自动复原,从头播放

5.监听鼠标进出事件,让轮播图停止和开始

6.监听按钮点击事件,让按钮操控轮播图

 

代码实现

<style>
    .newbh {
        color: red;
    }

    img {
        height: 100px;
        width: 200px;
    }

    .bt {
        position: absolute;
        top: 80px;
        left: 40px;
    }
</style>

<body>
    <div class="cz"><img src="1.jpg">
        <div class="bt">
        <button class="syz">上一张</button>
        <button class="xyz">下一张</button>
    </div>
    </div>
    <div><span id="a">熊猫能有什么坏心思</span></div>
    <div>
        <ul>
            <li class="newbh"></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>

</body>

<script>
    //准备一个数组对象,存储详细信息
    let message = [
        { src: '1.jpg', title: '熊猫能有什么坏心思' },
        { src: '2.jpg', title: '小兔子为什么这么白?' },
        { src: '3.jpg', title: '狗狗对人类很忠诚' },
        { src: '4.jpg', title: '猫咪凶起来谁都不怕' }
    ]

    let i = 0

    //获取元素
    const imgObject = document.querySelector('img')
    const spanObject = document.querySelector('#a')


    //设置间歇函数,定时修改图片和标题、小圆点
    let id = setInterval(fn, 1000)

    function fn() {
        i++
        //判断是否超过了最后一张,如果是,则重新赋值为0,图片从头开始播放
        if (i == message.length) {
            i = 0
        }
        //更新图片和标题
        imgObject.src = message[i].src
        spanObject.innerHTML = message[i].title
        //选出含有newbh的li标签对象,然后将其class删除
        const liObject = document.querySelector('.newbh')
        liObject.classList.remove('newbh')
        const ulliObject = document.querySelector(`ul li:nth-child(${i + 1})`)
        ulliObject.classList.add('newbh')
    }

    const divObject = document.querySelector('.cz')
    //鼠标进入图片关闭定时器
    divObject.addEventListener('mouseenter', function () {
        clearInterval(id)
    })
    //鼠标出去开启定时器
    divObject.addEventListener('mouseleave', function () {
        //注意,不要加let,不然又重新定义了一个定时器
        id = setInterval(fn, 1000)
    })

    //获取按钮对象
    const button1Object = document.querySelector('.syz')
    const button2Object = document.querySelector('.xyz')
    button1Object.addEventListener('click', function () {
        i--
        if(i < 0){
            i = message.length-1
        }
        //更新图片和标题
        imgObject.src = message[i].src
        spanObject.innerHTML = message[i].title
        //选出含有newbh的li标签对象,然后将其class删除
        const liObject = document.querySelector('.newbh')
        liObject.classList.remove('newbh')
        const ulliObject = document.querySelector(`ul li:nth-child(${i + 1})`)
        ulliObject.classList.add('newbh')
    })
    button2Object.addEventListener('click', fn)
</script>

二、实战案例:tab栏切换

需求:

鼠标经过不同的选项卡,底部可以显示不同的内容

分析

1.主要的核心是类的切换,设定一个当前类,可以让元素高亮

2.鼠标经过当前选项卡,先移除其余元素身上当前的类,而只给当前元素添加类

3.注意,当前类只能有一个

 1.普通版本

代码实现

<style>
    .ulli li {
        display: inline;
    }

    .ulli .active {
        color: red;
    }

    .dis img {
        position: absolute;
        left: 40px;
        height: 100px;
        width: 280px;
        border: 1px solid #000;
        display: none;
    }

    .dis .active {
        display: block;
    }
</style>

<body>
    <div class="ulli">
        <ul>
            <li class="active">智能先锋</li>
            <li>居家优品</li>
            <li>超市百货</li>
            <li>时尚达人</li>
        </ul>
    </div>
    <div class="dis">
        <img src="11.png" alt="" class="active">
        <img src="22.png" alt="">
        <img src="33.png" alt="">
        <img src="44.png" alt="">
    </div>
</body>
<script>
    //通过querySelectorAll()获取li对象的伪数组
    const liObject = document.querySelectorAll('.ulli li')
    //通过循环遍历伪数组将每一个li对象都添加事件监听
    for (let i = 0; i < liObject.length; i++) {
        liObject[i].addEventListener('mouseenter', function () {
            console.log(1)
            //排它思想改变动态样式
            //先去除
            const clearObject = document.querySelector('.ulli .active')
            //注意()内写的是对象名
            clearObject.classList.remove('active')
            //再添加
            const ulliObject = document.querySelector(`.ulli li:nth-child(${i + 1})`)
            //注意()内写的是对象名
            ulliObject.classList.add('active')

            //排它思想动态改变图片换行样式
            //先去除
            const clearImgObject = document.querySelector('.dis .active')
            clearImgObject.classList.remove('active')
            //再添加
            const disImgObject = document.querySelector(`.dis img:nth-child(${i + 1})`)
            disImgObject.classList.add('active')
        })
    }
</script>

2.事件委托版本

知识补充

自定义标签属性的对象

<div data-id= "1" ></div>

const div = document.querySelector('div')

console.log(div.dataset)   获得的是DOMStringMap对象

DOMStringMap对象里面有id属性和 1 属性值

console.log(div.dataset.id)   获取id属性值

代码实现

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .ulli li {
        display: inline;
    }

    .ulli .active {
        color: red;
    }

    .dis img {
        position: absolute;
        left: 40px;
        height: 100px;
        width: 280px;
        border: 1px solid #000;
        display: none;
    }

    .dis .active {
        display: block;
    }
</style>

<body>
    <div class="ulli">
        <ul>
            <li class="active"><a href="#" data-id="0">智能先锋</a></li>
            <li><a href="#" data-id="1">居家优品</a></li>
            <li><a href="#" data-id="2">超市百货</a></li>
            <li><a href="#" data-id="3">时尚达人</a></li>
        </ul>
    </div>
    <div class="dis">
        <img src="11.png" alt="" class="active">
        <img src="22.png" alt="">
        <img src="33.png" alt="">
        <img src="44.png" alt="">
    </div>
</body>
<script>
    //通过querySelector获取li的父对象ul
    const ulObject = document.querySelector('.ulli ul')
    //直接对父对象ul进行事件监听
    ulObject.addEventListener('click', function (e) {
        console.log(1)
        //获取具体点击了哪一个子a
        console.log(e.target)
        if (e.target.tagName === 'A') {
            //排它思想改变动态样式
            //先去除
            const clearObject = document.querySelector('.ulli .active')
            //注意()内写的是类名
            clearObject.classList.remove('active')
            //再添加
            //注意()内写的是对类名
            e.target.classList.add('active')
            //获取显示图片对象
            const imgObject = document.querySelector('.dis .active')
            //移除显示
            imgObject.classList.remove('active')
            //添加显示
            //获取图片对象伪数组
            const img = document.querySelectorAll('.dis img')
            //获取子对象自定义属性的值,再通过隐式转换为数字型
            const i = +e.target.dataset.id
            //伪数组的索引号对应标题号
            img[i].classList.add('active')
        }
    }) 
</script>

</html>

三、实战案例:表单全选反选

1.表单全选

需求:

点击全选框,复选框全部选中

将复选框全部选中,全选框自动选中,否则全选框不选中

分析:

全选框点击,可以得到当前按钮的checked的boolean值

把下面所有的小复选框状态checked,改为和全选框boolean值一致

遍历复选框,添加点击事件

检查选中的复选框个数是不是等于复选框总数

把判断的结果给全选框

利用css选中的复选框选择器

 

知识补充

 css选中的复选框选择器

可以通过  选择器checked

来选中已选中的复选框

那么也就可以获取已选中复选框的dom对象

例如

    .ck:checked {

        height: 20px;

        width: 20px;

        background-color: red;

    }这是对选中的复选框进行css修饰

<input type="checkbox" class="ck">

<input type="checkbox" class="ck">

<input type="checkbox" class="csk">

document.querySelectorAll('.ck:checked')这是获取所有选中的复选框dom对象的伪数组

document.querySelector('.csk:checked')这是获取已选中的复选框dom对象

代码实现

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    div {
        position: absolute;
        left: 30%;
        top: 30%;
    }

    table {
        height: 200px;
        width: 400px;
        text-align: center;
    }

    .ck:checked {
        height: 20px;
        width: 20px;
        background-color: red;
    }
</style>

<body>
    <div>
        <table border="2">
            <tr>
                <th><input type="checkbox" class="ckall">全选</th>
                <th>商品</th>
                <th>商家</th>
                <th>价格</th>
            </tr>
            <tr>
                <td><input type="checkbox" class="ck"></td>
                <td>小米手机</td>
                <td>小米</td>
                <td>1999</td>
            </tr>
            <tr>
                <td><input type="checkbox" class="ck"></td>
                <td>小米净水器</td>
                <td>小米</td>
                <td>2999</td>
            </tr>
            <tr>
                <td><input type="checkbox" class="ck"></td>
                <td>小米电视</td>
                <td>小米</td>
                <td>3999</td>
            </tr>
        </table>
    </div>
</body>
<script>
    //获取全选框对象
    const ckallObject = document.querySelector('.ckall')
    //获取所有复选框对象
    const ckObject = document.querySelectorAll('.ck')
    //对全选框对象添加点击事件监听
    ckallObject.addEventListener('click', function () {
        //循环遍历全选框伪数组赋与全选框控制checked的boolean值
        for (let i = 0; i < ckObject.length; i++) {
            ckObject[i].checked = this.checked
        }
    })

    //循环遍历给每一个复选框添加事件监听
    for (let i = 0; i < ckObject.length; i++) {
        ckObject[i].addEventListener('click', function () {
            //繁琐
            //let d = document.querySelectorAll('.ck:checked')
            // if(d.length === ckObject.length){ 
            //     ckallObject.checked = this.checked
            // }else{
            //     ckallObject.checked = false
            // }

            //当监听到已选中的复选框伪数组长度等于存在的复选框伪数组长度时,全选框选中
            ckallObject.checked = document.querySelectorAll('.ck:checked').length === ckObject.length
        })
    }
</script>

</html>

四、实战案例:哔哩哔哩导航滑动

需求:

当点击链接,下面红色滑块跟着移动

分析:

使用事件委托

点击链接得到当前元素的的offsetLeft的值

修改line颜色块的transform值 = 点击链接的offsetLeft

添加过渡效果

 

代码实现

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    li {
        display: inline;
    }

    a {
        text-decoration: none;
    }

    .bh {
        background-color: red;
        height: 10px;
        width: 20px;
        position: absolute;

        top: 40px;
        transition: all 1s;
    }

    .ulli {
        align-items: center;
        position: absolute;
    }
</style>

<body>
    <div class="ulli">
        <ul>
            <li><a href="#">首页</a></li>
            <li><a href="#">动画</a></li>
            <li><a href="#">番剧</a></li>
            <li><a href="#">果蔬</a></li>
            <li><a href="#">音乐</a></li>
        </ul>
        <div class="bh">
        </div>
    </div>
</body>
<script>
    //事件冒泡
    const ulObject = document.querySelector('ul')
    const divObject = document.querySelector('.bh')
    ulObject.addEventListener('click', function (e) {
        //确保是点击A触发
        if (e.target.tagName === 'A') {
            //移动li的border到ul的border距离
            divObject.style.transform = `translateX(${e.target.offsetLeft}px)`
        }
    })
</script>

</html>

五、实战案例:多功能电梯导航栏

需求:

点击不同的模块,页面可以自动跳转不同的位置

1.页面滚动到对应位置,导航显示,否则隐藏

2.点击导航对应小模块,页面会跳到对应大模块的位置

3.页面滚动到对应位置,电梯导航对应模块自动发生变化

分析:

1.显示隐藏电梯盒子和返回顶部已经完成,可以放到自执行函数里面,防止变量污染

2.电梯模块单独放到自执行函数里面

3.点击每个模块,页面自动滚动到对应模块,使用事件委托方法更加简单

分析:

点击小模块,当前添加这个类

解决处理初次获取不到active这个类

4.页面滚动到对应位置,电梯导航对应模块自动发生变化

分析

当页面滚动了,先移除所有小li的状态

因为页面滚动需要不断获取大盒子的位置,所以需要把所有的大盒子都获取过来

开始进行滚动判断

        -如果页面滚动大于第一个大盒子小于第二个大盒子的offsetTop就把对应的小盒子先出来添加类

        -以此类推

知识补充:

属性选择器

含有该属性的标签,将会被属性选择器所选中

格式

标签名[属性名]

标签名[属性名=属性值]

也可以直接简写

[属性名]

[属性名=属性值] 

可以通过属性选择器来获取标签的dom对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    input[value]{
        
    }
    [value]{

    }
    input[type=text]{

    }

</style>
<body>
    <input type="text" value="1">
    <input type="password" name="" id="2">
</body>
<script>
    const inputObject = document.querySelector('[value=1]')
    const inputObject1 = document.querySelector('input[type]')
    const inputObject2 = document.querySelector('[id]')
</script>
</html>

代码实现


http://www.niftyadmin.cn/n/5129735.html

相关文章

Windows VS C++工程:包含目录、库目录、附加依赖项、附加包含目录、附加库目录配置与静态库、动态库的调用

文章目录 1 包含目录/附加包含目录1.1 区别和作用1.2 设置路径 2 库目录/ 附加库目录2.1 用途2.2 设置路径 3 附加依赖项3.1 用途3.2 设置路径 4 注意运行库的设置4 静态链接库调用方法5 动态链接库的调用方法 利用Visual Studio编写C工程文件时&#xff0c;时常需要自行配置自…

比较浮点数时,我被绊倒了

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;新的征程&#xff0c;我们面对的不是…

中文编程工具免费版下载,中文开发语言工具免费版下载

中文编程工具免费版下载&#xff0c;中文开发语言工具免费版下载 中文编程工具开发的实际部分案例如下图 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。 https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502

OpenCV C++ 图像处理实战 ——《缺陷检测》

OpenCV C++ 图像处理实战 ——《缺陷检测》 一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型三、图像配准3.1 功能源码3.1 功能效果四、多元模板图像4.1 功能源码五、缺陷检测5.1 功能源码六、源码测试图像下载总结一、结果演示

一个简单的注册的页面,如有错误请指正;(3.JavaScript)

这段代码是一个JavaScript函数&#xff0c;实现了用户登录和上传图片的功能&#xff0c;并包含了一些辅助函数。让我一一解释&#xff1a; 1. login()&#xff1a;这个函数用于登录操作。首先&#xff0c;通过$(#name).val()来获取ID为name的元素的值&#xff0c;同理获取其他…

小型k8s

参考&#xff1a; 用于本地实验的小型 Kubernetes&#xff1a;k0s、MicroK8s、kind、k3s 和 Minikube - 知乎 https://www.cnblogs.com/jesse123/p/15559614.html K3s vs K8s&#xff1a;轻量级和全功能的对决_运行_部署_容器

01. 嵌入式与人工智能是如何结合的?

CPU是Arm A57的 GPU是128cuda核 一.小车跟踪的需求和设计方法 比如有一个小车跟踪的项目。 需求是&#xff1a;小车识别出罪犯&#xff0c;然后去跟踪他。方法&#xff1a;摄像头采集到人之后传入到开发板&#xff0c;内部做一下识别&#xff0c;然后控制小车去跟随。在人工智…

OpenAirInterface 实践4:OAI安装操作系统是那个?

OpenAirInterface (OAI) 官方推荐的操作系统是 Ubuntu。具体版本可能会随着时间和OAI的更新而改变&#xff0c;OAI通常推荐使用Ubuntu 18.04 LTS作为主要的开发和测试环境。但也有部分文档和指南提到了对Ubuntu 20.04 LTS的支持。 请注意以下几点&#xff1a; 版本匹配: OAI的…