JavaScript中防抖与节流指的是什么意思
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要为大家展示了"JavaScript中防抖与节流指的是什么意思",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"JavaScript中防抖与节流指的
千家信息网最后更新 2025年01月22日JavaScript中防抖与节流指的是什么意思一、函数防抖(debounce)
1. 什么是防抖?
二、函数节流
2.1 定时器实现
2.2 时间戳实现
2.3 时间戳+定时器
这篇文章主要为大家展示了"JavaScript中防抖与节流指的是什么意思",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"JavaScript中防抖与节流指的是什么意思"这篇文章吧。
一、函数防抖(debounce)
1. 什么是防抖?
函数防抖: 在频繁触发某一个事件时,一段时间内不再触发该事件后才会去调用对应的回调函数,在设定间隔时间内如果下一次事件被触发, 那么就重新开始定时器,直到事件触发结束。
规定时间内没有继续触发事件的前提下,再去调用事件处理函数;
具体如下面的例子所示:
/*定义防抖函数 * func:传入一个函数,事件不再持续触发时会调用该函数 * delay:定义持续多久后执行传入的回调函数 * */ function debounce(func,delay) { let timer = null // 用于保存定时器 return function (...args) { // 如果定时器存在,清除定时器,随后重新设置timer if(timer !== null) clearTimeout(timer) timer = setTimeout(func, delay) // 超过delay为接收到事件会调用这里的func 必要的额时候可以修改func的this指向 由于timer对外部存在引用,因此不会被销毁 } } /*事件处理函数*/ function testDeBounce(){ console.log('你看我执行了几次??') } // 接收debounce返回的函数 const temp = debounce(testDeBounce(),1000) /*绑定事件,测试防抖函数*/ window.addEventListener('scroll',()=>{ temp() }); // 这样写最少调用一次事件处理函数,最多也不会多余下面的写法执行的次数 window.addEventListener('scroll', testDeBounce); // 如果这样写的话,每当页面滚动就会调用事件处理函数
总结一下思路:
1.定义一个节流函数
2.函数内部使用一个变量保存定时器
3.返回一个函数,函数内部定义:如果定时器已经存在就清除定时器,重新设置定时器
4.定义一个变量来接收
debounce
返回的函数5.在事件的回调函数中直接调用上一步的变量接收的方法
二、函数节流
函数节流: 在事件持续触发的前提下,保证一定时间段内只调用一次事件处理函数,就是函数节流;
函数节流实现的方式: 定时器、时间戳、定时器+时间戳;
2.1 定时器实现
思路:
1.定义节流函数
throttle
2.定义
timer
保存定时器3.返回一个函数。函数内部定义:如果定时器不存在,设置定时器,间隔某一时间后将timer设置为
null
,如果在这之前事件再次触发,则定时器中的回调无效
/* * 定义定时器节流函数 * func:传入事件处理函数 * delay:在delay指定的时间内定时器回调无效 * */ function throttle(func,delay) { let timer = null const context = this return function(...args){ // 如果定时器不存在 if(!timer){ timer = setTimeout(()=>{ func.apply(context,args) // 考虑返回的函数调用的环境,因此这里不直接使用this timer = null // delay之后清除定时器 },delay) } } } function test() { console.log('啊啊啊!') } const temp = throttle(test,1000) document.querySelector('button').addEventListener('click',()=>{ temp() })
2.2 时间戳实现
var throttle = function(func, delay) { var prev = Date.now(); return function() { var context = this; var args = arguments; var now = Date.now(); if (now - prev >= delay) { func.apply(context, args); prev = Date.now(); } } } function handle() { console.log(Math.random()); } window.addEventListener('scroll', throttle(handle, 1000));
2.3 时间戳+定时器
// 节流throttle代码(时间戳+定时器):var throttle = function(func, delay) { var timer = null; var startTime = Date.now(); return function() { var curTime = Date.now(); var remaining = delay - (curTime - startTime); var context = this; var args = arguments; clearTimeout(timer); if (remaining <= 0) { func.apply(context, args); startTime = Date.now(); } else { timer = setTimeout(func, remaining); } }}function handle() { console.log(Math.random());} window.addEventListener('scroll', throttle(handle, 1000));
以上是"JavaScript中防抖与节流指的是什么意思"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
函数
定时器
事件
时间
处理
意思
内容
变量
篇文章
前提
思路
面的
学习
帮助
频繁
孤独
必要
代码
例子
再次
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
泰为软件开发有限公司
网页接收和发出的服务器地址
上海网络安全技术试点项目
软件开发晚上加班有工资吗
用什么软件开发扫码软件
江苏商务进口软件代理服务器
宝山区推广软件开发设备
服务器系统镜像文件
网络安全支队理支队什么意思
比亚迪汉服务器错误
数据库基础与应用是什么课
军人对于网络安全
软件开发公司有哪些特点
网络技术和计算机的飞速发展
360路由器 服务器
微信聊天记录db数据库密码
网络安全就业培训
服务器管理口日志获取
ss服务器 管理
乌镇网络安全会议
服务器安装PC系统教程
有生之年小说软件开发
网络安全实用技术零密钥加密
小学生网络安全活动总结
但是数据库是通勤
现在网络安全等级有哪些
智能服务器巡检管理系统
怎么限制某个数据库用户连接数
网络安全作用的设备
西安高新区网络安全宣传周