let top = document.documentElement.scrollTop || document.body.scrollTop为啥写两个怎么理解
时间: 2024-04-22 19:26:38 浏览: 23
这段代码是用于获取页面滚动的距离(垂直方向)。它使用了两个条件,分别是`document.documentElement.scrollTop`和`document.body.scrollTop`。
`document.documentElement.scrollTop`是获取文档根元素(即`<html>`元素)的滚动距离。在大多数现代浏览器中,这个属性可以正常工作。
然而,在某些情况下,一些旧版本的浏览器可能会将滚动距离存储在`document.body.scrollTop`中。所以为了兼容性考虑,使用了两个条件来获取滚动距离。
代码使用逻辑或(`||`)操作符,表示只要有一个条件满足,就会返回滚动距离。如果两个条件都不满足,那么`top`变量的值将为`undefined`。
综上所述,这段代码的作用是为了获取页面滚动的距离,并且考虑了不同浏览器的兼容性问题。
相关问题
pageScroll() { let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop scrollTop > 50 ? this.seclectActive = true : this.seclectActive = false }
这段代码是用来实现页面滚动时的操作。函数`pageScroll()`首先获取当前页面滚动的距离,使用`window.pageYOffset`获取滚动距离(兼容大多数浏览器),如果不支持,则使用`document.documentElement.scrollTop`或`document.body.scrollTop`获取。然后通过判断滚动距离是否大于50,来决定是否将`this.seclectActive`设置为true或false。如果滚动距离大于50,`this.seclectActive`会被设置为true,否则为false。
优化一下这段代码//1、获取元素 var one = document.querySelector('.one') var two = document.querySelector('.two') //2、绑定滚动事件 window.onscroll = function () { //2-1,获取浏览器卷去的高度 var height = document.documentElement.scrollTop || document.body.scrollTop //2-2,判断卷去的高度 if (height >= 300) { //显示 two.style.display = 'block' } else { //隐藏 two.style.display = 'none' } } //3,绑定点击事件 two.onclick = function () { //3-1,让页面滚动回到顶部 window.scrollTo({ top: 0, behavior: 'smooth' }) }
可以进行如下优化:
1. 将获取元素的代码封装成一个函数,方便复用;
2. 采用事件监听的方式代替直接给window对象绑定事件,避免冲突和覆盖;
3. 在滚动事件中,使用节流或防抖函数进行优化,避免事件频繁触发;
4. 在滚动事件中,判断当前滚动位置是否已经到达目标位置,如果是,就不再执行后面的代码;
5. 使用ES6的语法简化代码。
优化后的代码如下:
```javascript
// 1、封装获取元素的函数
const $ = selector => document.querySelector(selector)
// 2、使用事件监听代替直接绑定事件
window.addEventListener('scroll', throttle(() => {
// 2-1、获取浏览器卷去的高度
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop
// 2-2、判断卷去的高度
if (scrollTop >= 300) {
// 显示
$('.two').style.display = 'block'
} else {
// 隐藏
$('.two').style.display = 'none'
}
}), 300)
// 3、给回到顶部按钮绑定点击事件
$('.two').addEventListener('click', () => {
// 3-1、让页面滚动回到顶部
window.scrollTo({
top: 0,
behavior: 'smooth'
})
})
// 节流函数
function throttle(func, wait) {
let timer = null
return function () {
if (!timer) {
timer = setTimeout(() => {
func.apply(this, arguments)
timer = null
}, wait)
}
}
}
```
注:上述代码使用了节流函数进行优化,每隔300毫秒才会执行一次滚动事件的回调函数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)