web前端防抖和节流

1.防抖:

  设置延迟器,每个一段时间执行一次,执行钱要清除定时器

防抖问题:用户不断在滚动时,防抖函数一直不执行

案例:也i按滚动每隔1秒钟执行函数

<style type="text/css">
            div{
                height: 300px;
            }
        </style>
    </head>
    <body>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        
        <script type="text/javascript">
            window.οnscrοll=debounce(showtop,1000)//连续不断地 动作
            function showtop(){
                //获取滚动条位置
                var scrollTop=document.body.scrollTop || document.documentElement.scrollTop;
                console.log(scrollTop,'kkk')
            }
            function debounce(fn,delay){//fn被执行函数,delay延时
                let timer=null
                return function(){
                    if(timer){//如果timer存在的话,久清除timer
                        clearTimeout(timer)
                    }
                    timer= setTimeout(showtop,1000)
                }
            }
        </script>

2.节流

<style type="text/css">
            div{
                height: 300px;
            }
        </style>
    </head>
    <body>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        <div>qqqqqqqqqqqqqqqq</div>
        
        <script type="text/javascript">
            window.οnscrοll=throttle(showtop,1000)//连续不断地 动作
            function showtop(){
                //获取滚动条位置
                var scrollTop=document.body.scrollTop || document.documentElement.scrollTop;
                console.log(scrollTop,'kkk')
            }
            function throttle(fn,delay){
                let vaild =true;//设置的开关
                return function(){
                    if(!vaild){//如果为false执行
                        return false
                    }
                    vaild=false;
                    setTimeout(()=>{
                        fn();//调用方法
                        vaild=true;//重新打开开关
                    },delay)
                }
            }
        </script>

应用场景:

回到顶部

input框输入搜索提示

页面大小发生变化 onresize

对鼠标实时定位


版权声明:本文为liuli0927原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。