在浏览器中,如果在短时间内多次触发可以改变DOM树结构的事件,可能导致页面机构出现混乱甚至浏览器的崩溃。最近在做项目中,我无意中遇到一个问题,当滚到条到达某个高度时,使相应的元素从无到有,但是每次刷新页面后第一次到达时,鼠标滚轮都会停顿下来,经过询问老师和上网搜索,发现是监听滚动条事件造成的,因为滚动条动了一点,就会触发很多次监听事件,而且时间是极短的;所以就会造成浏览器也来不及反应,要卡在那一会。

后来我总结了几种解决方法。

一、函数节流

通过函数阻止相同的时间在较短 时间连续触发

这里通过200ms的延迟,当下次时间需要执行的时候,如果没超过200ms,会先清除原来的延时器,从新开始定时;这样可以保证两次相同的时间最少间隔在200ms以上。

二、防抖函数

防抖函数使在短时间内多次执行的事件合并成了一个时间在延迟时间后执行;

三、使用 rAF(requestAnimationFrame)

此函数是浏览器原生方法,有固定的频率,每秒执行60次函数,这样在上次函数还没结束前,下次函数不会调用执行。虽然这个方法性能更优化,但是此方法在时间上不能控制。

本文来自千锋教育,转载请注明出处。

JavaScript中短时间高频次触发事件的优化相关推荐

  1. js 手机端触发事事件、javascript手机端/移动端触发事件

    处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  2. JavaScript:window.event.srcElement(指触发事件的对象)

    event对象指当前触发的事件对象, window.event.srcElement是指触发事件的对象. srcelement 是事件初始目标的html元素对象引用,因为事件通过元素容器层次冒泡,可以 ...

  3. JavaScript触发事件大全--能力工场

    1.onabort:当用户终止正在打开的网页时产生该事件. 2.onblur:某元素失去活动焦点时产生该事件.例如鼠标在文本框中点击后又在文本框外点击时就会产生. 3.onchange:当网页上某元素 ...

  4. JavaScript原生自动触发事件

    在有些情况下,我们需要程序逻辑自动触发元素的事件,例如js提供了click(), form提供了reset(),submit()等方法!在jquery中提供了trigger()方法帮助我们自动触发事件 ...

  5. JavaScript中的触发事件

    这两天在敲订餐管理系统的界面的时候,才感觉到自己在前端这里才疏学浅,什么都没有整理过,因为页面的效果想使用JavaScript来展示,却发现不知道JS的代码是如何被驱动的,因此才有了这篇博客,帮助大家 ...

  6. javascript鼠标双击时触发事件大全

    javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...

  7. java鼠标js触发事件吗,JavaScript常见鼠标事件与用法分析

    摘要:这篇JavaScript栏目下的"JavaScript常见鼠标事件与用法分析",介绍的技术点是"JavaScript.鼠标事件.鼠标.事件.用法.分析", ...

  8. JavaScript自动触发事件

    有时候,我们需要代码自动触发对应的事件,而不需要人为操作.比如,一个按钮的点击事件,不要点击它,而让它自动执行. 首先定义事件,先按照传统的 onclick 方式来.(这里以点击某个标签事件为梨) v ...

  9. JavaScript 自定义事件、触发事件

    1. 自定义事件的基本步骤 创建事件. var event = document.createEvent('Event'); 初始化事件[参数:事件类型.事件是否在DOM中冒泡.是否可以用 preve ...

最新文章

  1. PHP教程中验证正整数is_int($value+0),为什么要这样?
  2. Java工具类——UUIDUtils
  3. 并发的核心:CAS 是什么?Java8是如何优化 CAS 的?
  4. .NET5实战千万并发,性能碾压各版本,云原生时代,.NET5为王!
  5. Tampermonkey笔记-脚本的搭建和基本使用
  6. 类的初始化和实例的初始化
  7. ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)
  8. c++如何编写线程安全的DLL
  9. Canonical发布企业级Kubernetes 1.14重点让使用者简单管理
  10. 无人车系统(三):用python写一个简单的无人车仿真环境
  11. 2021最全HW蓝队指导手册
  12. kirin710f是什么处理器_hisiliconkirin710是什么处理器
  13. 样本不均衡 Weighted cross entropy and Focal loss
  14. 惠普HP Ink Tank 118 打印机驱动
  15. android js下载地址,js点击下载跳转iOS或安卓
  16. 分布式计算原理之分布式协调与同步(1)——分布式事务
  17. sqlserver阻止保存要求重新创建表的更改
  18. 珠海云服务器散热器定做,我家云之瞎乱改造(散热+扩存)篇一
  19. Linux -- Ubuntu下载deepin wine依赖问题笔记
  20. 什么是Ordinal Classification?

热门文章

  1. 本周不容错过的的9篇NLP论文 | PaperDaily #21
  2. 接口本地正常服务器报500_运维该如何解决服务器底层维护难题?
  3. 【LeetCode】LeetCode之乘积最大子数组——枚举+动态规划+Kadane算法
  4. Windows Subsystem for Linux——[WslRegisterDistribution failed with error: 0x8007019e]解决方案
  5. Microtransactions
  6. count 数字计数
  7. php类的组成部分,计算机5大组成部分是什么?
  8. go中如何使用easyjson_如何在 Go 中编写无 Bug 的 Goroutines?
  9. vue-springboot项目 mybatis条件查询结果为null时解决方案 @Param @RequestParam 的参数传递
  10. C++阶段01笔记04【程序流程结构(选择结构、循环结构、跳转语句)】