JS防抖与节流的定义分别是什么,如何实现
Admin 2022-06-23 群英技术资讯 459 次浏览
定义:对于短时间内连续触发的事件,比如滚动事件,防抖就是让某个时间期限内,事件处理函数只执行一次。
关于防抖,拿手指按压弹簧举例,用手指按压弹簧,一直按住,弹簧将不会弹起直到松开手指。
举例resize:
function debounce(fn, wait){ var timer = null; return ()=>{ if(timer !== null){ clearTimeout(timer); } timer = setTimeout(fn, wait); } } function handle(){ console.log(Math.random()); } window.addEventListener("resize",debounce(handle, 1000));
上面是非立即执行版
立即执行版
function debounce(fn, wait){ let timeid, flag = true; return () => { clearTimeout(timeid); if(flag){ fn(); flag = false; }else{ timeid = setTimeout(()=>{ flag = true; }, wait); } } }
拖动浏览器窗口,触发resize,此时并不触发handle函数,定时器计时,在计时时间内再次触发resize的话,则会从新计时,这样做的好处就是拖动浏览器窗口触发resize,并不会频繁执行handle函数,只让其在需要执行的时候去运行,有效的去除了冗余。
常见写法:
const debounce = (func, delay = 200) => { let timeout = null return function () { clearTimeout(timeout) timeout = setTimeout(() => { func.apply(this, arguments) }, delay) } }
定义:让事件在一定时间内只执行一次。
本意是像水龙头的水滴一样,规定时间内只执行一次,减少频繁反复执行。
如搜索框input事件。
通过时间戳计算:
function throttle(fn,wait){ let startTime = 0; return function(){ let endTime = Date.now(); if(endTime-startTime>wait){ fn(); startTime = endTime; } } }
通过定时器:
function throttle(fn,wait){ let timeid = null; return function(){ if(!timeid){ timeid = setTimeout(function(){ fn(); timeid = null; },wait) } } }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家介绍的是关于js加载的内容,js的延迟加载和预加载是比较常用的web 优化方法,因此掌握js加载也是很有必要的,下面我们就来了解一下关于延迟加载和预加载的具体使用。
第一步用自带的包管理先删除一次yumremovenodejsnpm-y手动删除残留进入/usr/local/lib删除所有node和node_modules文件夹进入/usr/local/include删除所有node和node_modules文件夹进入/usr/local/bin删除node的可执行文件 安装nodejs官网最新的xz
这篇文章主要为大家介绍了用java编程来写一款JavaScript表格插件,非常的使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
本文主要介绍了TypeScript数据类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章给大家分享的是用jQuery实现消息提醒闪烁的效果。消息提醒闪烁我们在很多网站或是涉及软件上都见过,那么如何自己动手实现这个效果呢?文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008