解析浏览器的一些“滚动”行为鉴赏

2020-04-21 23:45:39易采站长站整理

let run = true;

return function () {
if (!run) return;
run = false;
setTimeout(() => {
fn.apply(this, arguments);
run = true;
}, interval);
};
}

用处:减少代码执行频率✅

函数防抖

当你加了函数防抖之后:


window.addEventListener("scroll", debounce(() => console.log("滚动结束!")));

效果如下:
 

debounce
源码:


function debounce(fn, interval = 500) {
let timeout = null;

return function () {
clearTimeout(timeout);
timeout = setTimeout(() => {
fn.apply(this, arguments);
}, interval);
};
}

用处:判断某个

动作结束
,如刚刚的滚动结束、input输入结束等✅

解决IOS设备局部滚动不顺畅(粘手)

除了浏览器原生滚动,

自定义的滚动条
都会出现这种情况,加以下属性就可以解决:


.box {
-webkit-overflow-scrolling: touch;
}

对比如下:
 


 

注意:要真机才能看到效果,这里指的

局部滚动
是指
自己定义的盒子
,然后设置
overflow: auto || scroll;
后的滚动行为;

滚动传播

指有多个

滚动区域
,当一个
滚动区域
滚动完之后,继续滚动会
传播到
到父区域继续滚动的行为:


.box {
overscroll-behavior: contain; // 阻止滚动传播
}

对比效果图如下:
 

横向滚动

移动端
遇到此需求比较多,常用于图片展示: