优化一下这段代码//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' }) }
时间: 2024-03-03 10:49:40 浏览: 68
document.all[]详解
可以进行如下优化:
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毫秒才会执行一次滚动事件的回调函数。
阅读全文