人生与戏

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>什么是函数节流?什么是函数防抖?</title>
    <link type="text/css" rel="stylesheet" href=" "/>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }
        html,body{
            height: 800px;
        }
    </style>

</head>
<body>
<button id="btn">怕你点坏了</button>
<!--
<script type="text/javascript">
    window.onload = function () {

    }
</script>
-->
<script type="text/javascript">
    /*
     函数节流:一个函数执行一次后,只有大于设定的执行周期后才会执行第二次。
     - 有个需要频繁触发函数,出于优化性能角度,在规定时间内,只让函数触发的第一次生效,后面不生效
     */
    /*
     节流函数
     @param fn 要被节流的函数
     @param delay 规定的时间
     */
    function throttle(fn,delay){
        //记录上一次函数触发的时间
        var lastTime = 0;

        return function(){
            //记录当前函数触发的时间
            var nowTime = Date.now();

            if(nowTime - lastTime > delay){
                //修正this指向问题
                //fn();
                fn.call(this);
                //同步时间
                lastTime = nowTime;
            }
        }
    }
    document.onscroll = throttle(function(){console.log('scroll滚轮事件被触发了' + Date.now());},200)

    /*
     防抖函数:一个需要频繁触发的函数,在规定时间内,只让最后一次生效,前面的不生效
     -- 其实就是怕你拼命点击(怕程序崩溃),只让最后一次点击生效
     */
    function debounce(fn,delay){
        //记录上一次的延时器
        var timer = null;
        return function(){
            //清除上一次延时器
            clearInterval(timer);
            //重新设置新的延时器
            timer = setTimeout(function(){
                fn.apply(this);
            },delay);
        }
    }
    document.getElementById('btn').onclick = debounce(function(){console.log('点击事件被触发了' + Date.now());},1000);
</script>
</body>
</html>

 

posted on 2018-10-29 11:17  人生与戏  阅读(132)  评论(0编辑  收藏  举报