函数防抖、节流:避免短时间内频繁触发执行函数

1.函数防抖

含义:触发高频事件后 n 秒后函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间;

举例:电脑1分钟无操作进入休眠状态,在60s内鼠标移动,重新计时一分钟

实现:先清除定时器标识,再设置定时器执行操作

需求:鼠标经过按钮,停止移动时,1s后仅打印一次

    var btn=document.getElementById('btn')
    
    //防抖函数
   const db = (fn, time) => {
        var timeout = null
        return function () {
            if(timeout){
                clearTimeout(timeout)
            }
            timeout = setTimeout(() => {
                fn.apply(this, arguments)
            }, time)
        }
    }
    //测试
    const input=()=>{
        console.log('111')
    }
    btn.addEventListener('mouseover',db(input,1000))

2.函数节流

含义:高频事件触发,但在 n 秒内只会执行一次,所以节流会稀释函数的执行频率

举例:

实现:

1.设置标识flag=true,当标识为true时,设置flag=false,并定时执行操作(重新将flag=true);当标识为false时返回。

2.将定时器标识设为空,不存在定时器时执行定时操作执行函数并将定时器标识设为空

需求:鼠标经过按钮,每隔1s打印一次

//节流函数
//第一种
//   const thr = (fn, time) => {
//       var flag = true;
//        return function () {
//            if (flag) {
//                flag = false
//                setTimeout(() => {
//                    flag = true
//                    fn.apply(this, arguments)
//               }, time)
//            } else {
//                return
//            }
//        }
//   }
//第二种
    const thr = (fn, time) => {
        var timer = null
        return function () {
            if (!timer) {
                timer = setTimeout(() => {
                    timer = null
                    fn.apply(this, arguments)
                }, time)
            }
        }
    }
//测试
    const ipt = () => {
        console.log('111')
    }
    btn.addEventListener('mouseover', thr(ipt, 1000))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值