函数防抖和节流

作者: it之承影含光 | 来源:发表于2017-09-05 14:54 被阅读75次

    一、什么是函数节流

    函数节流:是确保函数特定的时间内至多执行一次。

    1.函数节流的原理

    函数节流的原理挺简单的,当第一次触发函数执行时,创建一个定时器,延迟这个事件,如果在当前时间内再次触发,就清除原来的定时器,重新创建一个定时器,延迟执行。

    2.应用场景

    搜索联想/mousemove/keydown/高频率的点击

    3.代码实现

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>函数节流</title>
    </head>
    
    <body>
        <script>
            //函数节流
            const throttle = (fun, delay) => {
                let last = null;
                return () => {
                    //获取毫秒数
                    const now = +new Date();
                    if (now - last > delay * 1000) {
                        fun();
                        last = now;
                    }
                }
            }
            //实例函数
            const throttleDemo = throttle(() => console.log('throttleDemo'), 1);
            //函数调用
            throttleDemo();
    
        </script>
    </body>
    
    </html>
    

    二、什么是函数防抖

    函数防抖:是函数在特定的时间内不被再调用后执行。

    1.函数防抖的原理

    如果函数多次触发,则把上次记录的定时器清掉,重新开始。如果计时完毕,没有方法进来访问触发,则执行代码。

    2.应用场景

    多用在onresize跟onscroll,这两个事件一个在页面放大缩小时触发一个在页面滚动时触发,都是连续不断的触发的

    3.代码实现

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>函数防抖</title>
    </head>
    
    <body>
        <script>
            //函数防抖
            const debouce = (fun, delay) => {
                let timer = null;
                return () => {
                    clearTimeout(timer);
                    timer = setTimeout(() => {
                        fun();
                    }, delay * 1000);
                };
            };
            //实例函数
            const debouceDemo = debouce(() => console.log('debouceDemo'), 1);
            //函数调用
            debouceDemo();
        </script>
    </body>
    
    </html>
    

    相关文章

      网友评论

        本文标题:函数防抖和节流

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