zoukankan      html  css  js  c++  java
  • 高阶函数 debounce 和 throttle

    /**
    * 空闲控制 返回函数连续调用时,空闲时间必须大于或等于 idle,action 才会执行
    * @param idle   {number}    空闲时间,单位毫秒
    * @param action {function}  请求关联函数,实际应用需要调用的函数
    * @param tail?  {bool}      是否在尾部执行
    * @return {function}	返回客户调用函数
    */
    debounce(idle,action,tail?)
    

      

    /**
    * 频率控制 返回函数连续调用时,action 执行频率限定为 次 / delay
    * @param delay  {number}    延迟时间,单位毫秒
    * @param action {function}  请求关联函数,实际应用需要调用的函数
    * @param tail?  {bool}      是否在尾部用定时器补齐调用
    * @return {function}	返回客户调用函数
    */
    throttle(delay,action,tail?)
    

      

    使用样例:

    // ajaxQuery 将在停止输入 250 毫秒后执行
    $('#autocomplete').addEventListener('keyup',debounce(250,function() {
        ajaxQuery(this.value,renderUI);
    },true))
    // 当窗口大小改变时,以 50 毫秒一次的频率为单位执行定位函数 position
    window.addEventListener('resize',throttle(50,position,true) );
    

      更多:

    只要牵涉到连续事件或频率控制相关的应用都可以考虑到这两个函数,比如:

    • 游戏射击,keydown 事件
    • 文本输入、自动完成,keyup 事件
    • 鼠标移动,mousemove 事件
    • DOM 元素动态定位,window对象的resize和scroll 事件

    前两者 debounce 和 throttle 都可以按需使用;后两者肯定是用 throttle 了。

  • 相关阅读:
    字符串常量池
    JDK1.8-java.lang.Object类源码阅读
    请给你的Mysql(InnoDB)表加上主键吧
    java线程占多大的内存,占哪里的内存?
    c# 多线程
    c# 遍历文件夹及其所有文件
    T-SQL 查询语句总结
    SQL Server使用LIKE运算符进行匹配查询
    sql server中关于批处理与脚本的简单介绍
    关于SQL Server数据表的五中约束
  • 原文地址:https://www.cnblogs.com/daji/p/9519435.html
Copyright © 2011-2022 走看看