事件节流函数封装层

事件节流函数封装层

 以下场景往往由于事件频繁被触发,因而频繁执行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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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