3.3.2JavaScript网页编程——WebAPI(JS之DOM网页特效篇)

DOM续2

手风琴

图片自己找来替代,需求代码里面说明了

在这里插入图片描述

<!DOCTYPE html>
<html>

<head lang="en">
  <meta charset="UTF-8">
  <title>手风琴</title>
  <style>
    ul {
      list-style: none;
    }

    * {
      margin: 0;
      padding: 0;
    }

    div {
      width: 1200px;
      height: 400px;
      margin: 50px auto;
      border: 1px solid red;
      overflow: hidden;
    }

    div li {
      width: 240px;
      height: 400px;
      float: left;
      transition: all 500ms; /*过渡*/
    }

    div ul {
      width: 1200px;
    }
  </style>
</head>

<body>
  <div id="box">
    <ul>
      <li>
        <a href="#">
          <img src="./images/1.jpg" alt="">
        </a>
      </li>
      <li>
        <a href="#">
          <img src="./images/2.jpg" alt="">
        </a>
      </li>
      <li>
        <a href="#">
          <img src="./images/3.jpg" alt="">
        </a>
      </li>
      <li>
        <a href="#">
          <img src="./images/4.jpg" alt="">
        </a>
      </li>
      <li>
        <a href="#">
          <img src="./images/5.jpg" alt="">
        </a>
      </li>
    </ul>
  </div>
</body>
<script>
  // 1. li 默认有个宽度是 240像素  
  // 2. 当我们鼠标经过, 当前的小li 宽度变大 800px 其余的小li 变为 100px 
  // 3. 鼠标离开事件, 所有的小li 都要复原 宽度为 240px

  // 获取所有的li元素
  let lis = document.querySelectorAll('li')
  // 为每一个li绑定事件,mouseenter
  for(let i = 0; i < lis.length; i++){ //遍历

    //1.绑定鼠标扫过进入事件
    lis[i].addEventListener('mouseenter', function() { //对于每一个添加事件

      for(let j = 0; j < lis.length; j++){    //事件就是排他思想:对于每一个的都先设置100px
        lis[j].style.width = '100px'
      }
      //复活自己
        lis[i].style.width = '800px'

      //不能用改进思想的原因是,除了这个变了其他的也变得和原来的不一样,如果只是这个变其余不变,可以单独给他加类名,找到然后移除这个类名
    })   
    
    //2.绑定离开事件
    lis[i].addEventListener('mouseleave', function() {
      //鼠标离开,所有的块100px
      for(let j = 0; j < lis.length; j++){    //事件就是排他思想:对于每一个的都先设置100px
        lis[j].style.width = '240px'
      }
      //this.style.width = '100px' //这个不可以因为所有块的大小都变了
    })
    
  }

  
</script>

</html>


滚动scroll

监听整个页面滚动:很多网页需要检测用户把页面滚动到某个区域后做一些处理, 比如固定导航栏,比如返回顶部,事件名:scroll

如下图,既可以直接给给 window 或 document 添加 scroll 事件(推荐);也可以监听某个元素的内部滚动直接给某个元素加即可(div的css样式中,超了的文本overflow:auto就可以滚动了)

在这里插入图片描述

加载事件

加载事件load

加载外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件(必须等所有资源加载完)
在这里插入图片描述

如下图,如果把js写进head里面,而无非获得div,就可以直接获取元素后load

加载事件DOMContentLoaded

  • 当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表
    、图像等完全加载(只需要DOM渲染完,无需资源加载完)
  • 事件名:DOMContentLoaded
  • 监听页面DOM加载完毕:给 document 添加 DOMContentLoaded 事件

在这里插入图片描述

元素大小和位置

scroll家族(scroll事件之下)

我们想要页面滚动一段距离,比如100px,就让某些元素
显示隐藏,那我们怎么知道,页面滚动了100像素呢?
就可以使用scroll 来检测页面滚动的距离

  1. 获取宽高scrollWidth和scrollHeight:
  • 获取元素的内容宽高(不包含滚动条)返回值不带单位。scrollWidth(内容的宽,不包含滚动条的宽)和scrollHeight(内容的高,可能被隐藏,但是还是内容的高),例如下面的div是150px,150px,但scrollWidth是133,scrollHeight是378。

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

  1. 获取位置scrollLeft和scrollTop:
  • 获取元素内容往左、往上滚出去看不到的距离,这两个属性是可读取,也可以修改(赋值)

在这里插入图片描述

检测页面滚动的头部距离(被卷去的头部)用那个属性:document.documentElement 返回对象为HTML元素

在这里插入图片描述

  • 案例——返回顶部

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
备注: 第二点可以拿到window.addEventListener里面,但时滚一次触发一次,没有意义且慢

offset家族

使用场景:前面案例滚动多少距离,都是我们自己算的,最好是页面滚动到某个元素,就可以做某些事。简单说,就是通过js的方式,得到元素在页面中的位置这样我们可以做,页面滚动到这个位置,就可以返回顶部的小盒子显示…

  1. 获取宽高offsetWidth和offsetHeight:
  • 获取元素的自身宽高=包含元素自身设置的宽高+padding+border
  1. 获取位置offsetLeft和offsetTop:
  • 获取元素距离自己定位父级元素的左、上距离(如果没有定位的父亲,那就以文档左上角为主),注意offsetLeft和offsetTop是只读属性

案例——仿京东固定导航栏
需求:当页面滚动到秒杀模块,导航栏自动滑入,否则滑出
分析:
①:用到页面滚动事件
②:检测页面滚动大于等于 秒杀模块的位置 则滑入,否则滑出

在这里插入图片描述

在这里插入图片描述

案例——电梯导航案例
需求:点击可以页面调到指定效果
分析:
①:点击当前 小导航,当前添加active,其余移除active
②:得到对应 内容 的 offsetTop值
③:让页面的 scrollTop 走到 对应 内容 的 offsetTop
在这里插入图片描述

client家族

  1. 获取宽高clientWidth和clientHeight:
  • 获取元素的可见部分宽高(不包含边框,滚动条等)

可以用于媒体查询,获取当前窗口的大小从而改变样式,窗口改变resize事件

在这里插入图片描述
2. 获取位置clientLeft和clientTop:(了解)

  • 获取左边框和上边框宽度,注意是只读属性
  • 因为获取边框我们可以直接设置border属性嘛

总结

1. scroll家族
 获取元素内容的总大小
 获取元素向左向上滚出去看不见的距离 可读写属性
2. offset家族
 获取元素自身大小:包括自身设置的宽高、padding、border
 获取元素距离定位父级的左和上距离 只读属性
3. client家族
 获取元素可见区域的大小
 获取元素左、上边框距离 只读属性

轮播图案例

一个一个小需求写,简单的
动手敲完这个案例掌握鼠标事件

补充

css设置margin:0;padding:0是因为body有8px的外边距

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lanmy_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值