防抖和节流

防抖和节流是面试经常会被问到的问题,但是看的时候经常会搞混,对两种现象不明确,今天在实现的时候,觉得自己理解得更加清晰了。

防抖顾名思义是防止抖动,如果操作过于频繁,会出现抖动,防抖要等动作结束之后再执行,比如搜索框keyup事件触发查询,就是要等连续输入后触发,不是每一次输入都触发。

function debounce(fn, timeout) {
        let timer;
        return function() {
            let context = this
            if (timer) {
                clearTimeout(timer)
            }
            timer = setTimeout(function(){
                fn.call(context)
            }, timeout);
        }
    }
window.onmousemove = debounce(function(){
        console.log(888)
    }, 2000)

如果是动作执行过程中固定时间间隔执行那就是节流,对每一次事件进行控制,将频繁发生的事件处理成定时间隔发生,只有在上一次定时执行完之后再开始下一次,比如滑动滚动条,需要随着滚动条滑动内容,不能等滚动条滑动结束之后再更新内容。

    function throttle(fn, timeout) {
        let timer = null;
        valid = true
        return function() {
            if (!valid) {
                return
            }
            valid = false
            timer = setTimeout(() => {
                fn()
                valid = true
            }, timeout);
        }
    }
    window.onmousemove = throttle(function(){
        console.log(888)
    }, timeout)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值