当前位置: 首页 > Web前端 > HTML

【综合】Js防抖节流

时间:2023-03-28 15:52:24 HTML

首先要了解防抖节流的解决方法:事件处理函数调用频率无限制,增加了浏览器的负担,导致用户体验非常差,甚至冻结。1.防抖debounce的概念是在事件触发后n秒后执行回调。如果在这n秒内再次触发,则重新计时;简而言之,就是执行多个操作。该事件仅在指定时间内最后一次执行。应用场景文本框输入搜索(避免连续输入时多次请求界面)窗口缩放和滚动监听操作期间,频繁点击提交,表单重复提交实现原理设置一个定时器,在指定时间间隔内运行代码时清除最后一个定时器,并设置一个新的定时器,直到函数请求停止并超过时间间隔后才会执行。实现文本框输入搜索的代码示例先来看不防抖的操作:不防抖:很明显,如果一直监听输入值查询接口,必然会出现性能问题!使用debounce的操作:当使用debounce时:显然在指定的时间内只允许最后一次查询,大大降低了服务器查询压力监视器滚动条事件函数debounce(fn,wait){vartimeout=null;returnfunction(){if(timeout!==null)clearTimeout(timeout);超时=设置超时(fn,等待);};}functionhandle(){console.log(Math.random());}window.addEventListener("scroll",debounce(handle,1000));和上面的表单搜索查询原理一样,都是监听操作事件,在指定的时间段内只允许触发最后一次1.throttle的概念当事件持续触发时,它保证事件处理函数在一定时间内只被调用一次;也就是说:函数一直被触发,每次触发小于给定值,函数throttling每隔这个时间就会被调用一次,监听并计算滚动条的位置,使用throttling以一个频率获取某时的计算鼠标移动距离DOM元素拖放功能搜索查询等实现原理主要有两种方法:时间戳和定时器设置一个定时器,调用一个函数。如果调用函数是在给定时间段内,则每次给定时间段内执行一个函数代码示例表单搜索查询constsearch=document.getElementById("search");函数输入(val){console.log(val);}functionthrottle(fun,delay){letlast,timer;返回函数(args){constthat=this;constnow=+newDate();/*基于延迟,比较上次(last)操作时间和当前时间是否在上次操作(last)和延迟时间范围内;如果在范围内,则清除上一次定时器函数操作,开始新的定时器函数操作,往复循环*/if(last&&now