当前位置:网站首页>JS函数防抖&函数节流及其使用场景
JS函数防抖&函数节流及其使用场景
2022-08-02 21:11:00 【小孟童学】
JS防抖&节流函数及其使用场景
1、防抖函数概念
函数防抖是优化高频率执行JS代码的一种手段【永远在执行最后一次】
其中如:浏览器的resize、scroll,鼠标的mousemove、mouseover等事件在触发时会不断绑定事件上的回调函数,浪费资源、降低性能,这时需要用防抖函数来进行调用次数的限制。
(1)使用场景及函数样式
回到顶部、立即(实时)搜索、输入框搜索自动补全事件、频繁点赞&取消点赞等
//防抖函数 重点【必须清理定时器】
function debounce(callback,time = 400){
// 设置定时器时间为400ms
let t;
return function(){
clearTimeout(t);
t = setTimeout(callback,time);
}
}
//绑定滚动条事件
window.onscroll = debounce(function(){
console.log("调用了一次"); //注:log("要执行的事件")
},500); // 限制500ms执行一次
实现原理:如果在500ms内频繁操作事件,则每次都会清除一次定时器然后重新创建一个。直到最后一次操作事件,然后等待500ms后进行处理
(2)作用
当有些事件触发频率太高,浏览器来不及处理会造成浏览器卡顿、掉帧等
2、节流函数概念
函数防抖是优化高频率执行JS代码的一种手段
其中如:浏览器的resize、scroll,鼠标的mousemove、mouseover等事件在触发时会不断绑定事件上的回调函数,浪费资源、降低性能,这时需要用防抖函数来进行调用次数的限制。
(1)使用场景及函数样式
onrize、onscroll等频繁触发的函数,比如获取滚动条的位置然后执行下一步事件
// 节流函数 重点【最后必须重新赋值】
function throlle( callback,time){
let lasttime = new Date().getTime();
return function(){
let now = new Date().getTime();
if(now - lasttime > time){
callback();
lasttime = now;
}
}
}
window.onscroll = throlle(function(){
console.log("调用了一次");
},100);
实现原理:在一定时间间隔内只执行一次,在这段时间内无视后来产生的函数调用请求
(2)作用
当有些事件触发频率太高,浏览器来不及处理会造成浏览器卡顿、掉帧等
3、函数防抖&节流的区别
①相同点
都可以通过setTimeout实现,目的都是降低回调执行频率,节省资源,提高性能,前提都是频繁触发
②不同点
防抖:在一段连续操作结束后处理回调,将多次触发变为一次触发,一定时间内连续触发的事件只在最后一次执行
节流:减少一段时间的触发频率,一段连续操作中每一段时间只执行一次,侧重于一段时间内只执行一次
触发,一定时间内连续触发的事件只在最后一次执行
节流:减少一段时间的触发频率,一段连续操作中每一段时间只执行一次,侧重于一段时间内只执行一次
边栏推荐
猜你喜欢

Li Mu hands-on learning deep learning V2-bert and code implementation

Byte's internal technical map is amazing and practical

Informatics orsay a tong (1258: 【 9.2 】 digital pyramid)

汉源高科千兆4光4电工业级网管型智能环网冗余以太网交换机防浪涌防雷导轨式安装

SSM整合步骤(重点)

汉源高科2光12电千兆导轨式网管型工业以太网交换机双光自愈保护式以太网光交换机

工厂模式理解了没有?

Flink Yarn Per Job - 启动AM

"Weekly Translate Go" This time we have something different!-- "How to Code in Go" series launched
![[c] Detailed explanation of operators (1)](/img/7d/5f2030dcae0f3af16f6e9a37ff041b.png)
[c] Detailed explanation of operators (1)
随机推荐
.NET performance optimization - you should set initial size for collection types
ICLR 2022最佳论文:基于对比消歧的偏标签学习
数据库分析与优化
嗨!不来看一下如何骚气十足的登陆MySQL嘛?
从零开始配置 vim(5)——本地设置与全局设置
如何抓住NFT、元|宇|宙新趋势?
[Dry goods] Best practice of sub-library and sub-table
【干货】分库分表最佳实践
面试官居然问我:删库后,除了跑路还能干什么?
PyRosetta 安装方法之Conda安装
golang刷letcode:公司命名
博客主题美化第二弹
[C题目]力扣138. 复制带随机指针的链表
C primer plus学习笔记 —— 9、联合&枚举&typdef
Vscode快速入门、 插件安装、插件位置、修改vscode默认引用插件的路径、在命令行总配置code、快捷键
How to quickly compare two byte arrays for equality in .NET
如何成为一名正义黑客?你应该学习什么?
圆锥折射作为偏振计量工具的模拟
【STM32学习2】存储器相关概念与操作
golang刷leetcode: 卖木头块