zoukankan      html  css  js  c++  java
  • 关于节流和防抖的理解和函数实现

    节流和防抖,以前我经常把他们搞混掉。后来才知道各种代表的不同含义

    一句话来说:

    节流:不停触发时,每隔n秒执行1次。

    防抖:不停触发时,只触发1次。

    使用onmousemove时间来看看效果吧。

    先来看看没有节流和防抖的样子:触发太快了。

    简单代码:

    (function(){
        //原始方式
        let num=1
        let fangdou=document.querySelector("#wu")
        function count(){
            fangdou.innerHTML=num++
        }
        fangdou.onmousemove=count
    })();

    在来看下防抖的样子:在不断触发的时候,只执行了一次需要的。

    实现:

    (function(){
        //防抖
        let num=1
        let fangdou=document.querySelector("#fangdou")
        function count(){
            fangdou.innerHTML=num++
        }
        //去抖 可用于做滚动下一页 n时间内,频繁触发的事件,为1次
        function debounce(func,time){
            let timeout
            return ()=>{
                if(timeout) clearTimeout(timeout)
                timeout=setTimeout(()=>{
                    func.apply(this,arguments)
                },time)
            }
        }
        fangdou.onmousemove=debounce(count,500)
    })();

    还有节流的方式:在不断触发的时候,每个一段时间触发一次。

    实现:

    (function(){
        //节流
        let num=1
        let jieliu=document.querySelector('#jieliu')
        function count(){
            jieliu.innerHTML=num++
        }
        function throttle(func,time){
            let prev=0
            return ()=>{
                let now= +new Date
                if(now-prev > time){
                    func.apply(this,arguments)
                    prev=now
                }
            }
        }
        jieliu.onmousemove=throttle(count,500)
    })();
  • 相关阅读:
    326周日去找书
    新视野大学英语-Book1
    预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
    自定义GRUB主题
    Linux安装CMake
    Linux编译安装Apache
    @Scheduled注解
    熵权可拓物元模型
    Linux更新Python3.8
    Linux下更新GCC
  • 原文地址:https://www.cnblogs.com/wuhairui/p/13697103.html
Copyright © 2011-2022 走看看