防抖和节流的原理及实现
节流和防抖:限制函数的执行次数1.防抖防抖原理:事件响应函数在一段时间后才执行,如果在这段时间内再次调用,则重新计算执行时间。可理解为通过setTimeout的方式,在一定时间间隔内,将多次触
节流和防抖:限制函数的执行次数
1.防抖
防抖原理:
事件响应函数在一段时间后才执行,如果在这段时间内再次调用,则重新计算执行时间。可理解为通过setTimeout的方式,在一定时间间隔内,将多次触发转变成一次触发。
应用场景:
- scroll时间滚动触发
- 搜索框输入查询
- 表单验证
- 按钮提交事件
- 浏览器窗口缩放
简单实现:
function debounce(func, wait) {
let timeout
//由于绑定点击事件需要的是函数,所以这里必须返回一个函数
return function() {
let _this = this
let args = arguments
clearTimeout(timeout)
timeout = setTimeout(function() {
func.apply(_this, args)
}, wait)
}
}
2.节流
原理:如果你持续触发事件,每隔一段时间,只执行一次操作,可理解为减少一段时间之内事件的触发频率。
应用场景:
- DOM元素的拖拽实现功能
- 射击游戏
- 计算鼠标移动的距离
- 监听scroll滚动事件
简单实现:
function throttle(fn, delay) {
let begin = 0
return function() {
let cur = Date.now()
if(cur - begin > delay) {
fn.apply(this, arguments)
begin = cur
}
}
}
相关文章
- okhttp、okhttp3使用post方式发送form-data数据
- JAVA字符串逗号分隔并对每个字符串添加引号
- [Docker系列] Install BaoTa with Docker
- [信创系列]银河麒麟安装nodejs18和npm2,并启动对应工程
- EasyExcel导出Excel并合并单元格
- Python3安装pip及pip安装whl包
- [Ubuntu系列]Ubuntu 安装 Harbor
- [Ubuntu系列]Ubuntu 安装 docker 及修改 docker 存储位置
- [Centos系列]CentOS 修改 DNS
- [Centos系列]source /etc/profile 无法永久生效问题
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~