1.滚动事件和加载事件
1.1滚动事件
-
当页面进行滚动时触发的事件
-
为什么要学?
- 很多网页需要检测用户把页面滚动到某个区域后做一些处理, 比如固定导航栏,比如返回顶部
-
事件名: scroll
-
监听整个页面滚动:
//页面滚动事件 window.addEventListener('scroll', function () { //执行的操作 })
-
给window或document添加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> body { height: 3000px; } div { overflow: auto; width: 200px; height: 200px; background-color: pink; } </style> </head> <body> <div> 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 我说这里是hi我的的我说这里是hi我的的 </div> <script> let div = document.querySelector('div') window.addEventListener('scroll', function() { console.log(111) }) div.addEventListener('scroll', function() { console.log(23) }) </script> </body> </html>
1.2加载事件
- 加载外部资源( 如图片、外联CSS和JavaScript等)加载完毕时触发的事件
- 为什么要学?
- 有些时候需要等页面资源全部处理完了做一些事情
- 老代码喜欢把script写在head中,这时候直接找dom元素找不到
- 事件名: load
- 监听页面所有资源加载完毕:
- 给window 添加load事件
//页面加载事件
window.addEventListener('load', function () {
//执行的操作
})
- 注意:不光可以监听整个页面资源加载完毕,也可以针对某个资源绑定load事件
<!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>
body {
height: 3000px;
}
div {
overflow: auto;
width: 200px;
height: 200px;
background-color: pink;
}
</style>
<script>
window.addEventListener('load', function () {
let div = document.querySelector('div')
console.log(div)
})
</script>
</head>
<body>
<div>
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
我里面可以放很多的文字
</div>
<script>
// let div = document.querySelector('div')
</script>
</body>
</html>
- 当初始的HTML文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表
、图像等完全加载 - 事件名: DOMContentLoaded
- 监听页面DOM加载完毕:
- 给document添加DOMContentLoaded事件
document.addEventListener( 'DOMContentLoaded', function () {
//执行的操作
})
2.元素大小和位置
2.1 scroll家族
- 使用场景:
我们想要页面滚动一段距离,比如100px,就让某些元素
显示隐藏,那我们怎么知道,页面滚动了100像素呢?
就可以使用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;
}
div {
width: 150px;
height: 150px;
background-color: pink;
overflow: auto;
padding: 10px;
border: 10px solid red;
margin: 100px;
}
</style>
</head>
<body>
<div>
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
我有很多很多的内容哦
</div>
<script>
// scrollWidth scrollHeight 内容 宽高 (了解)
let div = document.querySelector('div')
console.log(div.scrollWidth) // 150 不带单位
console.log(div.scrollHeight) // 336 不带单位
console.log('----------------------------')
// offset 盒子元素的大小 = 盒子本身的宽度和高度 + padding + border
console.log(div.offsetWidth) // 150 不带单位
console.log(div.offsetHeight) // 150 不带单位
// console.log(div.offsetTop) //
// console.log(div.offsetLeft)
// client 当前可视区域 不包含滚动条 边框等等
console.log('----------------------------')
console.log(div.clientWidth)
console.log(div.clientHeight)
console.log(div.clientTop) // 边框的宽度 了解 呵呵
console.log(div.clientLeft)
// 2. 被卷去的头部和左侧
// div.addEventListener('scroll', function () {
// console.log(document.querySelector('div').scrollTop)
// })
</script>
</body>
</html>