手写通用防抖与节流函数

我们经常会绑定一些持续触发的事件,比如resize、scroll、mousemove等等,如果事件调用无限制,会加重浏览器负担,导致用户体验差,我们可以使用debounce(防抖)和throttle(节流)的方式来减少频繁的调用,同时也不会影响实际的效果。

防抖的概念

触发事件后n秒后才执行函数,如果在n秒内触发了事件,则会重新计算函数执行时间
防抖函数可以分为立即执行,和非立即执行两个版本
直白点:一定时间内,只有最后一次操作有效,再过wait毫秒后才执行函数
使用场景:例如拖动改变浏览器大小的时候,需要在改变再触发事件时,可以使用防抖。

//手写JS通用防抖函数
let timeout = null;
/**
 * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数
 *
 * @param {Function} func 要执行的回调函数
 * @param {Number} wait 延时的时间
 * @param {Boolean} immediate 是否立即执行
 * @return null
 */
const debounce = function(func, wait = 500, immediate = false) {
   
	if (timeout !== null) clearTimeout(timeout);
	if (immediate) {
   
        return (...args) => {
   
            let callNow = !timeout
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值