事件节流函数封装层

事件节流函数封装层

 以下场景往往由于事件频繁被触发,因而频繁执行DOM操作、资源加载等重行为,导致UI停顿甚至浏览器崩溃。

  1. window对象的resize、scroll事件

  2. 拖拽时的mousemove事件

  3. 射击游戏中的mousedown、keydown事件

  4. 文字输入、自动完成的keyup事件

  实际上对于window的resize事件,实际需求大多为停止改变大小n毫秒后执行后续处理;而其他事件大多的需求是以一定的频率执行后续处理。针对这两种需求就出现了debounce和throttle两种解决办法。

二、什么是debounce                            

   1. 定义

  如果用手指一直按住一个弹簧,它将不会弹起直到你松手为止。

      也就是说当调用动作n毫秒后,才会执行该动作,若在这n毫秒内又调用此动作则将重新计算执行时间。

   接口定义

1 /**
2 * 空闲控制 返回函数连续调用时,空闲时间必须大于或等于 idle,action 才会执行
3 * @param idle   {number}    空闲时间,单位毫秒
4 * @param action {function}  请求关联函数,实际应用需要调用的函数
5 * @return {function}    返回客户调用函数
6 */
7 debounce(idle,action)

2.简单实现

 1 var debounce = function(idle, action){
 2   var last
 3   return function(){
 4     var ctx = this, args = arguments
 5     clearTimeout(last)
 6     last = setTimeout(function(){
 7         action.apply(ctx, args)
 8     }, idle)
 9   }
10 }

三、什么是throttle                              

   1. 定义

  如果将水龙头拧紧直到水是以水滴的形式流出,那你会发现每隔一段时间,就会有一滴水流出。

  也就是会说预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期。

      接口定义:

1 /**
2 * 频率控制 返回函数连续调用时,action 执行频率限定为 次 / delay
3 * @param delay  {number}    延迟时间,单位毫秒
4 * @param action {function}  请求关联函数,实际应用需要调用的函数
5 * @return {function}    返回客户调用函数
6 */
7 throttle(delay,action)

   2. 简单实现

 1 var throttle = function(delay, action){
 2   var last = 0;
 3     return function(){
 4     var curr = +new Date()
 5     if (curr - last > delay){
 6       action.apply(this, arguments)
 7       last = curr 
 8     }
 9   }
10 }    

http://www.cnblogs.com/fsjohnhuang/p/4147810.html

http://www.cnblogs.com/dolphinX/p/3403821.html

http://www.admin10000.com/document/1124.html

【前端性能】高性能滚动 scroll 及页面渲染优化

转载于:https://www.cnblogs.com/suoking/p/5481808.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109027.html原文链接:https://javaforall.net

(0)
上一篇 2021年9月14日 下午10:00
下一篇 2021年9月14日 下午11:00


相关推荐

  • python的学生信息管理系统_学员信息管理系统设计

    python的学生信息管理系统_学员信息管理系统设计一.系统需求使用面向对象编程思想完成学员管理系统的开发,具体如下:系统要求:学员数据存储在文件中系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能。程序文件如下:程序入口文件:main.py学员文件:student.py管理系统⽂文件:managerSystem.pymain.py#1.导入managerSystem模块frommanagerSystemimport*#2.启动学员管理系统if__name__

    2026年1月30日
    6
  • TreeSet 和 HashSet区别

    TreeSet 和 HashSet区别HashSet 是采用 hash 表来实现的 其中的元素没有按顺序排列 add remove 以及 contains 等方法都是复杂度为 O 1 的方法 TreeSet 是采用树结构实现 红黑树算法 元素是按顺序进行排序 但是 add remove 以及 contains 等方法都是复杂度为 O log n 的方法 它还提供了一些方法来处理排序的 set 如 first last headSet tailSet 等

    2026年3月20日
    2
  • java io面试题_JavaIO流常见面试题

    java io面试题_JavaIO流常见面试题1.Java中有几种类型的流?字符流和字节流。字节流继承inputStream和OutputStream字符流继承自InputSteamReader和OutputStreamWriter总体结构图2.字节流和字符流哪个好?怎么选择?大多数情况下使用字节流会更好,因为大多数时候IO操作都是直接操作磁盘文件,所以这些流在传输时都是以字节的方式进行的(图片等都是按字节存储的)如果对于操作需要通过…

    2022年5月24日
    51
  • mpvue flyio「建议收藏」

    mpvue flyio「建议收藏」https://blog.csdn.net/qq_34239734/article/details/88836320不用改这个,如果改第一个,那么就自动改第二个了在main.js中代码如下importflyfrom’./utils/request’//将fly挂载在全局Vue.prototype.$fly=flyutil…

    2025年10月8日
    6
  • 路径分析图「建议收藏」

    路径分析图「建议收藏」1.数据格式将环境数据和生物数据按下图形式放入一个表格中,首列为样品名,首行为环境理化因子或者相关生物参数名称。数据选择适当的标准化,例如,除pH外,所有环境数据进行log处理。2….

    2022年8月24日
    11
  • mysql数据库读写分离实现_数据库读写分离的原理

    mysql数据库读写分离实现_数据库读写分离的原理读写分离是基于主从复制上面布置的,需要使用Atlas软件,代理服务器上只需要安装mariadb客服端三台服务器:一台做主,一台做从,一台安装Atlas软件主从复制部署在我的主页里面有,需要的可以去看下,链接:https://mp.csdn.net/mp_blog/creation/editor/1227122181)安装配置Atals软件,rz上传#rpm-ivhAtlas-2.2.1.el6.x86_64.rpm路径:cd/usr/local/mysql-proxy/bin..

    2025年6月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号