JS 防抖和节流(节流常用方式及控制第一次和最后一次触发)

编程入门 行业动态 更新时间:2024-10-23 18:23:34

JS <a href=https://www.elefans.com/category/jswz/34/1752808.html style=防抖和节流(节流常用方式及控制第一次和最后一次触发)"/>

JS 防抖和节流(节流常用方式及控制第一次和最后一次触发)

简单叙述一下防抖和节流的概念

防抖:事件连续多次触发只执行最后一次
节流:事件连续多次触发在单位时间内触发一次(触发多次)

经典案例:
浏览器滚动事件
防抖对应 :当鼠标一直在滚动时 停止的时候触发(触发一次)
节流对应:当鼠标一直在滚动时 每隔单位时间触发(触发多次)

防抖实现

    //防抖function debounce(fn, wait) {let timer = null;return function () {if (timer) clearTimeout(timer)timer = setTimeout(fn, wait);}

节流实现
常用两种实现方式 时间戳实现、定时器实现。但这两种都存在弊端
第一次时(刚开始事件) 时间戳会在立马就触发 定时器则过单位时间触发
最后一次时(刚结束事件) 时间戳立马停止触发 定时器则过单位时间触发
所以可以结合两者不同 控制最后一次和第一次是否触发

    //节流 定时器 (最后一次也触发)function throttle1(fn, wait) {let timer = null;return function () {if (!timer) {timer = setTimeout(() => {timer = null;fn()}, wait);}}}//节流 时间戳 (第一次就触发)function throttle2(fn, wait) {let pre = 0;return function () {let now = Date.now()if (now - pre > wait) {fn()pre = now}}}//节流 控制最后一次和第一次function throttle3(fn, wait, op = {}) {let timer = null;let pre = 0;return function () {let now = Date.now();if (now - pre > wait) {if (pre == 0 && !op.bengin) {pre = nowreturn}if (timer) {clearTimeout(timer)timer = null}fn()pre = now} else if (!timer && op.end) {timer = setTimeout(() => {fn();timer = null}, wait)}}}

更多推荐

JS 防抖和节流(节流常用方式及控制第一次和最后一次触发)

本文发布于:2024-03-04 10:41:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1709043.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:防抖   常用   方式   JS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!