zoukankan      html  css  js  c++  java
  • 防抖节流

    封装防抖节流函数

    防抖

    // 防抖函数
        function debounce(fn,delay) {
            let timer = null;
            return ()=>{
                // 清楚上一次的计时器
                clearTimeout(timer)
                timer = setTimeout(()=>{
                    // 改变this指向
                    fn.apply(this)
                },delay)
            }  
        }
    //测试  在html搞一个id为box的盒子元素
        document.getElementById('box').onclick = debounce(()=>{
            console.log('点击事件'+Date.now())
        },1000)
    

    防抖2

     //防抖  
        // 输入完毕后过2秒再查询(延迟执行)
        function debounce(fn, wait) {
            let timer = null;
            return function () {
                if (timer) clearTimeout(timer)
                timer = setTimeout(() => {
                    fn.apply(this, arguments)
                }, wait)
            }
        }
        //防抖  
        // 输入完毕后立即执行查询,过2秒才能进行查询(立即执行)
        function debounce(fn, wait) {
            let timer = null;
            return function(){
                if (timer) clearTimeout(timer);
                let callnow = !timer; //类型转换
                timer = setTimeout(()=>{
                    timer = null;//清空当前定时器
                },wait)
                if(callnow) fn.apply(this);//第一次执行
            }
        }
    
    
        let btn = document.getElementById("btn");
        // 点击之后过两秒之后再触发,连续多次点击不会触发
        btn.onclick = debounce(()=>{
            console.log(1)
        },2000)
        // 点击事件立即触发,连续点击不会触发,2秒之后点击再次触发
        // btn.onclick = debounce1(() => {
        //     console.log(1)
        // }, 2000)
    

    节流

    // 节流函数
        function throttle(fn,delay){
            let timer = 0;
            return ()=>{
                let nowtime = Date.now(); //注意当前事件一定得写在return函数内
                if(nowtime - timer > delay){
                    fn.call(this);
                    // 同步时间
                    timer = nowtime
                }
            }
        } 
    //测试  高度大一点  出现滚动条 测试
        window.onscroll = throttle(function() {
            console.log(Date.now())
        },1000)
    

    节流2

       // 节流 点击之后过两秒之后才会触发事件
        function throule(fn,wait){
            let timer;
            return function (){
                if(!timer){
                    timer = setTimeout(()=>{
                        timer = null;
                        fn.apply(this)
                    },wait)
                }
            }
        }
    
        let btn = document.getElementById("btn");
          // 每隔两秒触发一次  再此期间点击多少次都不会出发啊
        btn.onclick = throule(()=>{
            console.log( new Date())
        },2000)
    

    异步使用防抖语法

    click: utils.debounce(async (row)=>{
           //里面写操作
    },2000)
    

  • 相关阅读:
    vue element-ui 动态上传
    vue element ui 导航刷新 is-active
    算法图解笔记
    简单操作的一些小技巧
    大话数据结构 -07-1 图的定义、抽象数据类型与存储结构
    ELO kernels 记录
    [2] day 02
    [1] first day
    大话数据结构 -04-3 队列
    大话数据结构 -04-2 栈的应用-递归
  • 原文地址:https://www.cnblogs.com/loveliang/p/13667283.html
Copyright © 2011-2022 走看看