JavaScript中防抖与节流指的是什么意思
发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇文章主要为大家展示了"JavaScript中防抖与节流指的是什么意思",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"JavaScript中防抖与节流指的
千家信息网最后更新 2024年11月20日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安全错误
数据库的锁怎样保障安全
电子科技大学无线互联网作业
四年级网络安全手抄报图片
我的世界登不进去服务器怎么办
鹰潭个人服务器价格
网络安全大会 厦门
软件开发用story是什么
青年网络技术有限公司
北京中展汇集软件开发有限公司
CBM是一个全文型数据库
关于软件开发的演讲
数据库调java
app软件开发的售后
网站网络安全责任制度
软件开发外部派遣管理
dump没有数据库
天津回收全新服务器
网络安全扫描软件souls
u8的链接服务器配置文件
网络安全防间保密讨论
大象免费外网服务器在线
多少钱可以学软件开发
云服务器能装win10镜像吗
网络安全法能管网吧吗
怀旧服不同服务器的区别
网络安全信息化主任
深圳软件开发学徒招聘信息
我的世界服务器惊现基岩
关于网络安全防火墙红头文件
江苏运营网络安全工程联系人
网络安全形势不容乐观事例