【javascript|js防抖和节流】
js防抖和节流
- 前言
- 一、函数防抖
- 二、函数节流
- 总结
前言 在进行窗口的操作或者输入框操作是,如果事件处理函数用的频率无限制,会加重浏览器和服务器的负担,此时我们就可以用防抖(debounce)和节流(throttle)的方式来减少调用评率,同时又不影响实际效果。
一、函数防抖 单位时间内,频繁触发一个事件,以最后一次触发为准。
防抖的实现:
1.声明一个全部变量存储定时器ID。
2.每一次触发交互的时候,先清除上一次的定时器,然后开启本次定时器。
//输入框事件
let timeID = null
document.querySelector('input').oninput = function () {
//1先清除之前的定时器
clearTimeout(timeID)
//2.开启本次定时器
timeID = setTimeout(() => {
console.log(`发送ajax,搜索的内容是${this.value}`)
}, 500)
}
二、函数节流 单位时间内,频繁触发一个事件,只会触发一次。
节流的实现:
1.声明一个全局变量存储触发事件。
2.每一次触发事件,获取当前时间。
3.判断当前时间与上一次触发事件,是否超过了间隔。
4.如果超过间隔时间,则执行事件处理代码,然后存储本次触发的时间。
//声明一个全局变量存储触发时间
let lastTime = null
//页面滚动事件
window.onscroll = function () {
//1.每一次触发 先获取本次时间戳
let currentTime = Date.now()
//2.判断当前时间 与 上次触发时间 是否超过间隔
if (currentTime - lastTime >= 500) {
console.log(document.documentElement.scrollTop)//获取滚动距离
//3.存储本次的触发时间
lastTime = currentTime
}
}
总结 函数防抖:
将几次操作合并为一次操作进行。原理是维护一个定时器,规定在延迟时间后触发函数,只有最后一次操作能被触发。
函数节流:
使得一定时间内只触发一次函数。原理是通过判断是否到达一定时间来触发函数。
应用场景:
防抖:search联想搜索,用户在不断输入内容的时候,用防抖来节约请求资源。window触发resize时候,不断调整浏览器窗口大小会不断的触发这个事件,用防抖让其只触发一次。
节流:鼠标不断点击(mousedown)触发,让其单位时间内只触发一次。
监听滚动事件,滑到底部自动加载更多。
推荐阅读
- JavaScript|JS 防抖和节流实现详解
- JavaScript|JavaScript 防抖和节流的实现
- javascript|javascript防抖和节流原理
- .net|第一个.netcore的前后端交互项目——申请试用表单的提交之【前端】使用Vue+elementui设计表单
- ajax|猿创征文 | 如何使用原生AJAX请求数据
- 操作系统|IT历史(计算机业简史)
- 软件测试|提升软件测试效率,是一种自我习惯
- 微信小程序|微信小程序面试题大全(持续更新)
- 前端|微信小程序全面实战,架构设计 && 躲坑攻略