Web APIs---DOM- 网页特效篇

107 阅读2分钟

滚动事件和加载事件

滚动事件

​ 应用场景:比如网页滚动到一定距离后固定导航栏,返回顶部等

​ 使用:给 window 或 document 添加 scroll 事件,如果想要监听某个元素的内部滚动直接给某个元素加即可

// 页面级别滚动   监听整个页面滚动   事件名:scroll
        window.addEventListener('scroll',function () {
            //这个代码可以获取到当前页面的滚动距离
            console.log(document.documentElement.scrollTop);
        })

加载事件

​ load

​ load事件会在标签生成后,同时会等待标签内的外部资源(外部css js 图片 视频)也加载完成才会触发load事件,写代码的时候,我们 会把所有的代码都写在 window load事件内来确保我们所需要的外部资源全部都可以使用

​ DOMContentLoaded

​ 页面的标签加载完毕,事件就触发,不需要等待标签的内容都加载完成

元素大小和位置

scroll家族

​ dom.scrollTop / scrollLeft-:获取元素垂直 / 水平滚动的距离

​ dom.scrollWidth / scrollHeight:获取整个滚动区间内不包含滚动条的宽 / 高度,例如:整个元素的高度是300,但是内部数字滚动的 高度是2000,那么2000就是scrollHeight,scrollWidth也是同理

image-20220416115800847

offset家族

​ dom.offsetLeft / offsetTop:获取已经定位的父元素的左边水平 / 上面垂直距离,若父级没定位,则获取自身的位置

​ dom.offsetWidth / offsetHeight:获取元素自身的宽 / 高,包含滚动条区域包含元素自身设置的宽高、padding、border

image-20220416142416850

client家族

​ dom.clientLeft / clientTop:获取左侧 / 上面滚动的距离

​ dom.clientWidth / clientTop:获取可视区域的宽 / 高度(不包含滚动条)

image-20220416142937914

综合案例

scroll事件---页面滚动显示&点击返回顶部

        // 滚动到700显示 否则就隐藏  同时点击返回顶部
        const a = document.querySelector('a')

        // 绑定滚动事件
        window.addEventListener('scroll', function () {
            //  设置滚动长度 700就显示 不到则隐藏
            if (document.documentElement.scrollTop >= 700) {
                //  显示
                a.style.display = 'block'
            } else {
                // 隐藏
                a.style.display = 'none'
            }
        })

        // 3.点击图片缓慢返回最顶部
        a.addEventListener('click', function () {
            // 慢慢的来设置 scrollTop 减少为0 即可
            let timeId = setInterval(function (prams) {
                document.documentElement.scrollTop -= 30
                if (document.documentElement.scrollTop === 0) {
                    // 清除定时器
                    clearInterval(timeId)
                }
            }, 10)
        })

焦点轮播图

      // 获取小图片的li标签
      const lis = document.querySelectorAll('.indicator li');
      // 获取大图对应的li标签
      const slidesLis = document.querySelectorAll('.slides li');
      // 遍历来绑定点击事件
      for (let index = 0; index < lis.length; index++) {
        lis[index].addEventListener('click', function (event) {
          // 把大图的 active 类 移除掉
          document
            .querySelector('.slides li.active')
            .classList.remove('active');
          // // 把小图的 active  移除掉
          document
            .querySelector('.indicator li.active')
            .classList.remove('active');

          // 给当前点击的li标签对应下标的 小图 添加 active类
          this.classList.add('active');
          // console.log(this);// 希望 this是li标签
          // 给当前点击的li标签对应下标的 大图 添加 active类
          slidesLis[index].classList.add('active');

          // 设置标题文字
          document.querySelector('h3').innerText = `第${
            index + 1
          }张图的描述信息`;
        });
      }