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

    首先要理解防抖函数的定义:当函数被连续调用时,并不执行设定的动作,只有当停止调用函数一段时间后才执行一次设定的动作.就像上电梯的时候,大家在上电梯的过程中门一直处于开的状态,只有当没有人上电梯一段时间后,电梯才会关门。

    本例使用滚动事件为例

    var $card = document.getElementById('card')
    function scrollHandle(e) {
        console.log(e)    // 
        console.log(this) // 
    }
    $card.addEventListener('scroll', throttle(scrollHandle,1000))
    // 先触发动作
    function debounce1(func, wait) {
        var timeout; // 标记
        return function() {
            var that = this;
            var arg = arguments;
            timeout&&clearTimeout(timeout);
            !timeout && func.apply(that,arg)
            timeout = setTimeout(function(){timeout = null}, wait) 
        }
    }
    // 后触发动作
    function debounce2(func, wait) {
        var timeout; // 标记
        return function() {
            var that = this;
            var arg = arguments;
            timeout&&clearTimeout(timeout);
            timeout = setTimeout(function(){func.apply(that,arg)}, wait) 
        }
    }

    节流就是节约流量,将连续触发的事件稀释成预设的频率.无论这期间触发多少次事件,都是按照预设的频率执行

    // 先触发动作
    function throttle1(func, wait) {
        var timeout;
        return function() {
            var that = this;
            var arg = arguments;
            if(!timeout){
                func.apply(that,arg);
                timeout = setTimeout(function() {
                    clearTimeout(timeout);
                    timeout = null;
                }, wait)
            } 
        }
    }
    
    // 后触发动作
    function throttle2(func, wait) {
        var timeout;
        return function() {
            var that = this;
            var arg = arguments;
            !timeout&&(timeout = setTimeout(function() {
                clearTimeout(timeout);
                timeout = null;
                func.apply(that,arg);
            }, wait))
        }
    }
  • 相关阅读:
    对mysql 数据库操作 使其支持插入中文(针对python)
    网页制作中的超链接怎么做
    python requests的安装与简单运用(转)
    ubuntu 修改权限
    [Linux]常用命令与目录全拼
    Python web 简单服务器的搭建与运行
    ubuntu 下终端关于调试C++的命令
    正则表达式基本语法详解
    Linux下 编译C++/C以及常用的几种命令(ubuntu)
    Visual Studio 2013 中 mysql 使用 EF6
  • 原文地址:https://www.cnblogs.com/nicederen/p/12618899.html
Copyright © 2011-2022 走看看