美文网首页
防抖和节流

防抖和节流

作者: 前端mh | 来源:发表于2022-03-02 13:52 被阅读0次

防抖和节流的区别,以及如何实现?

防抖:设置一段时间,当用户连续触发事件的时候,此时只会执行一次。
节流:设置一段时间,当用户连续点击的时候,每隔一段时间执行一次。

  var btn = document.getElementById('btn')  
  var timeT  = null   
  btn.onclick = () => {   
          clearTimeout(timeT);      
          timeT =  setTimeout(() => {       
              console.log("正在发送请求。。。")     
          }, 500)  
      }  

解释:定义一个全局的timeT变量,并将定时器赋值给全局变量,第一次点击的时候过了0.5秒会执行定时器内的内容,在5秒内点击的多次都会被清除掉。

防抖案例:(el-input)

    <template>
        <div>
            <el-input style="width:200px;" placeholder="请输入" v-model="searchInput" clearable />
        </div>
    </template>

    <script>
    export default {
        data () {
            return {
                searchInput: '',
                timer: null
            }
        },
        watch: {
            searchInput () {
                this.debounce(this.getUpList, 500)
            }
        },
        methods: {
            debounce (fn, wait) {
                 if (this.timer !== null) {
                     clearTimeout(this.timer)
                     }
                     this.timer = setTimeout(fn, wait)
              },
                
                getUpList () {
                // 请求内容...
                console.log('正在发送请求。。。。')
            }
        }
     }

    </script>

防抖二

    const BTN = document.getElementById("btn");
    BTN.onclick = ()=>{debounce(func, 500)}
    
    function func() {
        return console.log("发送请求。。。");
    }
    
    let timer = null;

    function debounce(func, time) {
        if (timer) {
            clearTimeout(timer);
        }

        timer = setTimeout(() => {
            func();
        }, time);
    }
    

防抖三

    const BTN = document.getElementById("btn");
    BTN.onclick = debounce(func, 500);
    
    function func() {
        return console.log("发送请求。。。");
    }
    
    function debounce(func, time) {
        let timer = null;
        return () => {
            if (timer) {
                clearTimeout(timer);
            }
            timer = setTimeout(() => {
                func();
            }, time);
        };
    }

节流一

    var btn = document.getElementById('BTN')  
    let timeOut = true;
    
    btn.onclick = () => {     
        if (timeOut) {       
            timeOut = false       
            console.log('正在发送请求。。。')       
            setTimeout(() => {         
                timeOut = true       
            }, 2000)     
        }  
    }

解释:timeOut相当于一个阀门,先定义一个全局的timeOut为true, 当进入if判断的时候立即关闭阀门,让timeOut变成false,此时发送了一个请求,然后通过定时器来限制timeOut变成true的时候,这样下一次timeOut变成true是两秒之后, 这样就实现了每隔多少秒发送一次请求的操作。

节流二

    let timer = true;
    
    BTN.onclick = () => { 
        throttle(func, 1000);
    }; 
    
    let func = () => { 
        console.log("发送请求。。。");
    }; 
    
    function throttle(func, time) { 
        if (timer) {
            timer = false; 
            func(); 
            setTimeout(() => { 
                timer = true; 
            }, time);
        } 
    }

节流三

const BTN = document.getElementById("btn");
BTN.onclick = throttle(func, 1000); 

function func() {
  return console.log("发送请求。。。");
} 
function throttle(func, time) { 
  let timer = true; 
  return () => { 
      if (timer) { 
          timer = false; 
          func();
          setTimeout(() => { timer = true; }, time);
      } 
  };
}

相关文章

  • 谈谈js中的节流和防抖函数

    关于节流和防抖,这篇文章说的很好了,深入lodash源码分析防抖和节流深入篇 | Lodash 防抖和节流是怎么实...

  • JavaScript防抖和节流

    1. 认识防抖和节流 1.1. 对防抖和节流的认识 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电...

  • 前端性能优化-浅谈js防抖和节流

    浅谈js防抖和节流

  • Javascript 基础

    1、函数防抖和函数节流 【《javascript高级程序设计》里,函数节流是这里讲的函数防抖。】函数防抖: 在事件...

  • js 防抖 节流

    节流 防抖1 防抖2

  • 2019-03-27

    js的防抖和节流 据我所知防抖和节流都是为了优化作用,减轻浏览器和服务端的负担,防抖和节流俩个的英文要记住: de...

  • js的防抖和节流

    js的 防抖(debounce)和 节流(throttle ) 防抖和节流一般用于高频触发事件,属于浏览器性能优化...

  • 手写防抖和节流函数实现

    1. 认识防抖和节流函数 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电子元件中,节流出现在流体流...

  • 实现防抖和节流

    一、认识防抖和节流函数 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电子元件中,节流出现在流体流动...

  • 2019-04-24关于节流和防抖

    节流: 应用场景: 防抖: 应用场景: 1.节流 2.防抖

网友评论

      本文标题:防抖和节流

      本文链接:https://www.haomeiwen.com/subject/jbayrrtx.html