图片自己找来替代,需求代码里面说明了
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
如下图,既可以直接给给 window 或 document 添加 scroll 事件(推荐);也可以监听某个元素的内部滚动直接给某个元素加即可(div的css样式中,超了的文本overflow:auto就可以滚动了)
加载外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件(必须等所有资源加载完)
如下图,如果把js写进head里面,而无非获得div,就可以直接获取元素后load
我们想要页面滚动一段距离,比如100px,就让某些元素
显示隐藏,那我们怎么知道,页面滚动了100像素呢?
就可以使用scroll 来检测页面滚动的距离
检测页面滚动的头部距离(被卷去的头部)用那个属性:document.documentElement 返回对象为HTML元素
备注: 第二点可以拿到window.addEventListener里面,但时滚一次触发一次,没有意义且慢
使用场景:前面案例滚动多少距离,都是我们自己算的,最好是页面滚动到某个元素,就可以做某些事。简单说,就是通过js的方式,得到元素在页面中的位置这样我们可以做,页面滚动到这个位置,就可以返回顶部的小盒子显示…
距离自己定位父级
元素的左、上距离(如果没有定位的父亲,那就以文档左上角为主),注意offsetLeft和offsetTop是只读属性案例——仿京东固定导航栏
需求:当页面滚动到秒杀模块,导航栏自动滑入,否则滑出
分析:
①:用到页面滚动事件
②:检测页面滚动大于等于 秒杀模块的位置 则滑入,否则滑出
案例——电梯导航案例
需求:点击可以页面调到指定效果
分析:
①:点击当前 小导航,当前添加active,其余移除active
②:得到对应 内容 的 offsetTop值
③:让页面的 scrollTop 走到 对应 内容 的 offsetTop
可以用于媒体查询,获取当前窗口的大小从而改变样式,窗口改变resize事件
2. 获取位置clientLeft和clientTop:(了解)
1.
scroll家族
获取元素内容的总大小
获取元素向左向上滚出去看不见的距离 可读写属性
2.offset家族
获取元素自身大小:包括自身设置的宽高、padding、border
获取元素距离定位父级的左和上距离 只读属性
3.client家族
获取元素可见区域的大小
获取元素左、上边框距离 只读属性
一个一个小需求写,简单的
动手敲完这个案例掌握鼠标事件
css设置margin:0;padding:0是因为body有8px的外边距