Java教程

防抖节流理解

本文主要是介绍防抖节流理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

先明白一个概念,防抖和节流的区别

防抖:疯狂点击,在设定的这个时间段内只会发送最后一次点击要求

节流:定时器设置的,在设定的时间间隔内只执行一次,循环进行

对于防抖的简单函数编写

<button id="debounce">点我防抖!</button>

$('#debounce').on('click', function(){
    let timer;
    return function () {
        clearTimeout(timer);
        timer = setTimeout(() => {
            console.log("防抖成功!");
        }, 500);
    }
});

防抖运用的方面之一,页面滚动监听,方法如下

function debounce(fn,delay) {
    let timer = null;
    return function () {
        let self = this,
            args = arguments;
        timer && clearTimeout(timer);
        timer = setTimeout(function () {
            fn.apply(self,args);
        },delay);
    }
}

window.onscroll = debounce(function () {
    let scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
    console.log('滚动条位置:' + scrollTop);
},200)

节流的简单函数编写

<button id="throttle">点我节流!</button>

$('#throttle').on('click', throttle());

function throttle(fn) {
    let flag = true;
  
    return function () {
        if (!flag) {
            return;
        }
        flag = false;
        //此处设置的是一秒执行一次操作
        setTimeout(() => {
            console.log("节流成功!");
            flag = true;
        }, 1000);
    };
}

节流一遍用于对输入框的请求,百度的搜索框在我们输入的时候就节流的操作

<input type="text" value="" id="input">

$('#input').on('keyup', throttle(function () {
    console.log($(this).val())
    
}, 1000));

function throttle(fn, delay) {
    let flag = true;
    return function () {
        let self = this,
            args = arguments;
        if (!flag) {
            return;
        }
        flag = false;
        setTimeout(() => {
            fn.apply(self, args);
            flag = true;
        }, delay);
    }
}

 

这篇关于防抖节流理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!