防抖与节流函数

码海逐风客
• 阅读 1208
防抖

当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始计时

function debounce(fn, delay) {
    let timer = null;
    return function(){
        if(timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(() => {
            fn.apply(this, arguments);
        }, delay);
    };
}
节流

当持续触发事件时,保证在一定时间内只调用一次事件处理函数

function throttle(fn, delay) {
    let timer = null;
    return function() {
        if(!timer) {
            timer = setTimeout(() => {
                fn.apply(this, arguments);
                timer = null;
            }, delay)
        }
    };
}
应用

debounce

  • search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
  • 频繁操作点赞和取消点赞,因此需要获取最后一次操作结果并发送给服务器

throttle

  • 鼠标不断点击触发,mousedown(单位时间内只触发一次)
  • window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
点赞
收藏
评论区
推荐文章
海军 海军
4年前
浅聊函数防抖与节流
防抖(debounce)所谓防抖,就是指触发事件后n秒后才执行函数,如果在n秒内又触发了事件,则会重新计算函数执行时间。防抖类型分为1.非立即执行版2.立即执行版3.合成版本防抖防抖应用场景登录、发短信等按钮避免用户点击太快,以致于发送了多次请求调整浏览器窗口大小时,resize次数过于频繁,造成计算过多,此时需要一次到
记录 30 seconds of code 项目个人觉得中有价值的片段或者小技巧(二)
DF系列1、防抖函数,限制高频触发jsconstdebounce(fn,ms0)lettimeoutId;returnfunction(...args)clearTimeout(timeoutId);timeoutIdsetTimeout(()fn.apply(this,args),ms);
Chase620 Chase620
4年前
防抖和节流
防抖触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次触发,则重新计算事件思路每次触发的时候取消之前的延时调用方法,以当下为准//防抖functiondebounce(fn){lettimeoutnull;returnfunction(){clearTimeout
LinMeng LinMeng
4年前
v-on绑定多个方法
von绑定多个方法触发机制不同语法如下:<divvon"{click:getSome,mousemove:MouseClick}"von绑定多个方法</div一个事件绑定多个函数触发机制相同,较少<div@click"getA(),getB()"一个事件绑定多个函数</div
Wesley13 Wesley13
3年前
java nio 源码分析2 IO
目的一直想知道当channel.write返回时,到底这个数据是交给操作系统了,还是说已经发出网卡了,还是说已经发出去收到ACK了.(答案:只是说明它写入了内核的send\_queue)javanio是水平触发的,而且缓冲区超过"低水位"就触发读事件,不超过"高水位"就触发写事件,那这个水位到底多高?缓冲
LinMeng LinMeng
4年前
js的防抖与节流
在进行窗口的resize、scroll,输入框内容校验等操作时,如果事件处理函数调用的频率无限制,会加重浏览器的负担,导致用户体验非常糟糕。此时我们可以采用debounce(防抖)和throttle(节流)的方式来减少调用频率,同时又不影响实际效果。函数防抖函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才
Easter79 Easter79
3年前
Swing自定义事件
1.Swing自定义事件将一个组件的事件传递给另一个组件.使用EventListenerList来管理事件,当A组件触发事件的时候,调用方法fireActionPerformed()来触发事件,然后再B组件中actionPerformed()方法来接收事件.当在容器KeyTextComponent中按下鼠标,我们就可以在Jframe中捕获触发的事
Wesley13 Wesley13
3年前
Go 语言基础入门教程 —— 函数篇:匿名函数和闭包
匿名函数熟悉Laravel框架(一个PHPWeb框架)的同学对匿名函数应该很熟悉,Laravel框架中有着大量匿名函数的应用场景,比如路由定义、绑定实现到接口等://路由定义再比如Swoole中通过回调函数处理网络事件实现异步事件驱动也是匿名函数的典型应用场景://收到请求时触发可以看到,匿名函数
Stella981 Stella981
3年前
JavaScript——页面相关事件
页面事件是在页面加载或改变浏览器的大小、位置,以及对页面中的滚动条进行操作时,所触发的事件处理程序。加载与卸载事件加载事件(onload)是在网页加载完毕后触发相应的事件处理程序,它可以在网页加载完成后对网页中的表格样式、字体、背景颜色等进行设置。卸载事件(unload)是在卸载网页时触发相应的事件处理程序,卸载网页是指关闭当前页或
Stella981 Stella981
3年前
JavaScript 事件不触发
在class上绑定的事件,点击图片的时候无法触发<divid"files"class"files"<div<p<canvaswidth"80"height"80"</canvas<br<spanclass
菜园前端 菜园前端
2年前
什么是防抖和节流?
原文链接::::tip防抖和节流一般在做用户体验优化的时候会用上。:::什么是防抖?是指一个事件在同一时间内被多次频繁触发后,最终只会执行一次。多次触发后会重新计算时间,只生效最后一次触发。基础案例可通过定时器来实现javascriptvartimer0f