zoukankan      html  css  js  c++  java
  • 精简的javascript下throttle和debounce代码

    //频率控制 函数连续调用时,fn 执行频率限定为 1次/waitMs。立即执行
    function throttle(waitMs, fn) {
    var lastRun = 0;
    return function () {
    var now = +new Date;
    if (now - lastRun > waitMs) {
    lastRun = now;
    fn.apply(null, arguments);
    }
    }
    }

    //空闲控制 返回函数连续调用时,空闲时间必须大于或等于 waitMs,fn 才会执行。延迟执行
    function debounce(waitMs, fn) {
    var lastCall, args, timeout;
    return function r() {
    lastCall = +new Date;
    args = arguments;
    if (!timeout) {
    timeout = setTimeout(later, waitMs);
    }
    };

    function later() {
    var past = +new Date - lastCall;
    if (past > waitMs) {
    timeout = null;
    fn.apply(null, args)
    }
    else {
    timeout = setTimeout(later, waitMs - past + 1)
    }
    }
    }

    调用方法如下:
    $(window).resize(debounce(100, function(evt){
        ......
    }));
    $(document).mousemove(throttle(40, function(evt){
        ......
    }));
     



  • 相关阅读:
    FPGA在其他领域的应用(一)
    FPGA IN 消费电子
    FPGA IN 金融领域
    FPGA与PCI-E
    FPGA与数字信号处理
    FPGA与数字图像处理技术
    FPGA与安防领域
    FPGA在电平接口领域的应用
    FPGA与Deep Learning
    FPGA多时钟处理应用
  • 原文地址:https://www.cnblogs.com/hz-blog/p/6039653.html
Copyright © 2011-2022 走看看