事件节流函数封装层

事件节流函数封装层

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


相关推荐

  • AdminLTE 背景色小结

    AdminLTE 背景色小结adminLTE背景色

  • 支付宝支付接口

    支付宝支付接口

  • java bitwise_Java Core.bitwise_and方法代码示例

    java bitwise_Java Core.bitwise_and方法代码示例importorg.opencv.core.Core;//导入方法依赖的package包/类publicMatskinDetection(Matsrc){//definetheupperandlowerboundariesoftheHSVpixel//intensitiestobeconsidered’skin’Scalarlower=newSca…

  • docker启动mysql失败(闪退)原因

    docker启动mysql失败(闪退)原因创建好mysql之后容器之后可以连接后来修改了配置发现mysql启动不了dockerps-a查看发现mysql的状态一直是EXISTdockerstartmysql能成功启动(docker返回mysql)但是再查看dockerps发现还是没有启动起来大概可以知道就是docker启动之后又迅速关闭想起Docker容器后台运行,就必须有一个前台进程。否则就会自动关闭,大概推测是docker里的mysql没又起起来。想起刚刚修改了配置,可能是配置错了导致的。一看发现粘贴配置的时候格

  • 分子动力学模拟软件_材料领域十大常用绘图软件

    作为材料领域的科研工作者,你是否常为如何表达自己的思想而苦恼?作为学术论文创造者,你是否为论文中图文单一而叹气?在这里,GO小妹推荐给你几款常用绘图软件,让你论文从此成为焦点!1——OriginProOringinPro的主要功能为数据分析和绘图。Origin的数据分析主要包括统计、信号处理、图像处理、峰值分析和曲线拟合等各种完善的数学分析功能。进行数据分析时,只需将原始数据粘贴进Origin表格…

  • 计算机分子模拟聚乙烯,用“分子模拟”软件构建聚乙烯分子、全同立构聚丙烯分子,并计算它们末端的直线距离-高分子物理-实验1-01…

    计算机分子模拟聚乙烯,用“分子模拟”软件构建聚乙烯分子、全同立构聚丙烯分子,并计算它们末端的直线距离-高分子物理-实验1-01…高分子物理实验。实验一用“分子模拟”(MP)软件构建聚乙烯分子、全同立构聚丙烯,并计算它们末端的直线距离一、实验目的1.了解用计算机软件模拟大分子的“分子模拟”新趋势。2.学会用“分子模拟”软件构造聚乙烯、聚丙烯大分子。3.计算主链含100个碳原子的聚乙烯、聚丙烯分子末端的直线距离。二、实验原理已经知道,C-C单键是σ键,其电子云分布具有轴对称性。因此,σ键相连的两个碳原子可…

发表回复

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

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