DOM- 网页特效篇

这篇博客详细介绍了网页滚动事件和加载事件的使用,包括如何监听页面滚动和加载状态。同时,讲解了DOM中关于元素大小和位置的重要属性,如scroll、offset家族,并通过实际案例展示了它们在页面导航栏显示、内容切换等场景的应用。最后,提供了一个综合案例,演示了图片轮播的实现,涉及到鼠标悬停、点击事件以及定时器的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DOM- 网页特效篇

1.滚动事件和加载事件

1.1.滚动事件

在这里插入图片描述

1.2.加载事件

在这里插入图片描述
在这里插入图片描述

小结
  1. 页面滚动事件如何添加?
    scroll
    监听整个页面滚动给 window 或 document 加
  2. 加载事件有哪两个?如何添加?
    load 事件:监听整个页面资源给 window 加
    DOMContentLoaded:给 document 加,当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像等完全加载

2.元素大小和位置

2.1. scroll家族

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

案例在这里插入图片描述

源代码

<!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>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .content {
            width: 1000px;
            height: 3000px;
            background-color: pink;
            margin: 0 auto;
        }

        .backtop {
            display: none;
            width: 50px;
            left: 50%;
            margin: 0 0 0 505px;
            position: fixed;
            bottom: 60px;
            z-index: 100;
        }

        .backtop a {
            height: 50px;
            width: 50px;
            background: url(./images/bg2.png) 0 -600px no-repeat;
            opacity: 0.35;
            overflow: hidden;
            display: block;
            text-indent: -999em;
            cursor: pointer;
        }
    </style>
</head>

<body>
    <div class="content"></div>
    <div class="backtop">
        <img src="./images/close2.png" alt="">
        <a href="javascript:;"></a>
    </div>
    <script>
        let backtop = document.querySelector('.backtop')
        let a = document.querySelector('.backtop a')
        let img = document.querySelector('.backtop img')

        window.addEventListener('scroll', function() {
            if(document.documentElement.scrollTop >= 500) {
                backtop.style.display = 'block'
            } else {
                backtop.style.display = 'none'
            }
        })

        a.addEventListener('click', function() {
            document.documentElement.scrollTop = 0
        })
        img.addEventListener('click', function() {
            backtop.style.display = 'none'
        })
    </script>
</body>

</html>
2.2 offset家族

在这里插入图片描述

小结

在这里插入图片描述

案例1

在这里插入图片描述
源代码

<!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>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        .content {
            overflow: hidden;
            width: 1000px;
            height: 3000px;
            background-color: pink;
            margin: 0 auto;
        }

        .backtop {
            display: none;
            width: 50px;
            left: 50%;
            margin: 0 0 0 505px;
            position: fixed;
            bottom: 60px;
            z-index: 100;
        }

        .backtop a {
            height: 50px;
            width: 50px;
            background: url(./images/bg2.png) 0 -600px no-repeat;
            opacity: 0.35;
            overflow: hidden;
            display: block;
            text-indent: -999em;
            cursor: pointer;
        }

        .header {
            position: fixed;
            top: -80px;
            left: 0;
            width: 100%;
            height: 80px;
            background-color: purple;
            text-align: center;
            color: #fff;
            line-height: 80px;
            font-size: 30px;
            transition: all .3s;
        }

        .sk {
            width: 300px;
            height: 300px;
            background-color: skyblue;
            margin-top: 500px;
        }
    </style>
</head>

<body>
    <div class="header">我是顶部导航栏</div>
    <div class="content">
        <div class="sk">秒杀模块</div>
    </div>
    <div class="backtop">
        <img src="./images/close2.png" alt="">
        <a href="javascript:;"></a>
    </div>
    <script>
        let sk = document.querySelector('.sk')
        let header = document.querySelector('.header')

        window.addEventListener('scroll', function() {
            if(document.documentElement.scrollTop >= sk.offsetTop) {
                header.style.top = '0'
            }else {
                header.style.top = '-80px'
            }
        })

    </script>
</body>

</html>
案例2

在这里插入图片描述
源代码

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .aside {
            position: fixed;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
        }

        .item {
            height: 40px;
            line-height: 40px;
            text-align: center;
            padding: 0 10px;
            cursor: pointer;
        }

        .active {
            background-color: red;
            color: #fff;
        }

        .content {
            width: 660px;
            margin: 400px auto;
        }

        .neirong {
            height: 300px;
            margin-bottom: 20px;
            color: #fff;
        }

        .content1 {
            background-color: red;
        }

        .content2 {
            background-color: blue;
        }

        .content3 {
            background-color: orange;
        }

        .content4 {
            background-color: yellowgreen;
        }
    </style>
</head>

<body>

    <div class="aside">
        <div class="item active">男装/女装</div>
        <div class="item">儿童服装/游乐园</div>
        <div class="item">电子产品</div>
        <div class="item">电影/美食</div>
    </div>

    <div class="content">
        <div class="neirong content1">男装/女装</div>
        <div class="neirong content2">儿童服装/游乐园</div>
        <div class="neirong content3">电子产品</div>
        <div class="neirong content4">电影/美食</div>
    </div>

    <script>
        let items = document.querySelectorAll('.item')
        let neirongs = document.querySelectorAll('.neirong')

        for(let i = 0; i < items.length; i++) {
            items[i].addEventListener('click', function() {
                document.querySelector('.aside .active').classList.remove('active')
                this.classList.add('active')
                document.documentElement.scrollTop = neirongs[i].offsetTop
            })
        }

    </script>
</body>

</html>
2.3 client家族

在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

3.综合案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
源代码(JS)

<script>
    let indicator = document.querySelectorAll('.indicator li')
    let slides = document.querySelectorAll('.slides li')
    let extra = document.querySelector('.extra h3')
    let next = document.querySelector('.next')
    let prev = document.querySelector('.prev')
    let main = document.querySelector('.main')
    //1.鼠标经过图片,高亮,其余变暗
    for(let i = 0; i < indicator.length; i++) {
      indicator[i].addEventListener('mouseenter', function() {
        document.querySelector('.indicator .active').classList.remove('active')
        this.classList.add('active')
         //2.大图片跟着变化
        document.querySelector('.slides .active').classList.remove('active')
        slides[i].classList.add('active')

        extra.innerHTML = `${i + 1}张图的描述信息`

        //解决bug
        index = i
      })
     
      
    }
  
    //3.右键按钮播放
    let index = 0
    next.addEventListener('click', function() {
      index++
      index = index % slides.length

      common()

    })

    prev.addEventListener('click', function() {
      index--
      if(index < 0) {
        index = slides.length - 1
      }
      common()
    })

    //相同操作封装函数
    function common() {
      document.querySelector('.indicator .active').classList.remove('active')
      indicator[index].classList.add('active')
         //2.大图片跟着变化
        document.querySelector('.slides .active').classList.remove('active')
        slides[index].classList.add('active')

        extra.innerHTML = `${index + 1}张图的描述信息`
    }

    //开启定时器
    let timer = setInterval(function() {
      next.click()
    }, 1000)

    //鼠标经过停止计时器
    main.addEventListener('mouseenter', function() {
      clearInterval(timer)
    })

    //鼠标离开开启计时器
    main.addEventListener('mouseleave', function() {
      timer = setInterval(function() {
      next.click()
    }, 1000)
    })
  </script>

第五阶段over

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值