当类似用户改变浏览器窗口大小的事件,有可能会连续触发多次。有的页面需要做到联动处理,在多次触发中可能会卡死,尤其是在性能低下的IE上若每次触发都执行一些图形渲染更是个大问题。
以下代码就解决了这个问题。绑定了window的resize事件,但是每次触发后会延迟500毫秒,给每次触发这个事件进行了tag标识,只处理连续触发后的最后一次的触发行为。
$(function(){ var tag = 0; var coverChartWidth = function(t){ if(t != tag){return;} var w = $(document).width() || 0; if(w < 1150){ $('#chartTable').width(1150); } }; $(window).bind('resize',function(){ tag++; (function(t){ setTimeout(function(){ coverChartWidth(t); },500); })(tag); }); });
用tag标识的方法确实太麻烦了,借鉴网友的更好的方法代码如下:
//可进一步扩展为支持可传参的fn var onFooEndFunc = function(fn) { var delay = 50; // 根据实际情况可调整延时时间 var executionTimer; return function() { if (!!executionTimer) { clearTimeout(executionTimer); } //这里延时执行你的函数 executionTimer = setTimeout(function() { //alert('123'); fn(); }, delay); }; };
在使用的时候直接调用这个 onFooEndFunc 函数,把你需要的处理函数传进去即可。
下面以document.onmousemove为例,自己试试运行的效果,使用延时处理前,移动鼠标,会发现事件触发非常频繁,使用延时处理后,移动鼠标,事件就没那么频繁了。
测试代码:(在线测试:http://pgkk.github.io/testDelayEvent.html)
<html> <head> <script type="text/javascript"> var count = 0; var myfn = function() { document.getElementById("TextArea1").value = "Executed " + (++count) + " times."; } var normalevent = function() { count = 0; document.getElementById("TextArea1").value = "Executed 0 times."; document.onmousemove = myfn; }; var endevent = function() { count = 0; document.getElementById("TextArea1").value = "Executed 0 times."; document.onmousemove = onFooEndFunc(myfn); }; </script> </head> <body> <input id="normal" value="恢复正常" onclick="normalevent()" type="button" /> <input id="end" value="使用延时" onclick="endevent();" type="button" /> <textarea id="TextArea1" style="height: 40px; width: 200px; color: #ff0000; clip: rect(auto, auto, auto, auto);"></textarea> </body> </html>
上面只是以 document.onmousemove为例,还有很多其他DOM事件存在相同问题,例如onScroll, onMouseMove, onResize,同理,都可以用这个方法来解决,具体还可以看这里的例子,方法本质上都是一样的。
相关推荐
在Web开发中,防止用户在短时间内重复触发相同的事件是一个常见需求。例如,在提交表单或者发送Ajax请求时,用户可能会因为点击事件没有即时响应而多次点击按钮,导致数据重复提交。这种现象不仅影响用户体验,还...
冒泡事件和事件捕获是JavaScript中...总之,冒泡事件与事件捕获是JavaScript中事件处理的核心概念,它们提供了一种机制来控制事件在DOM结构中的传播方式,对于实现复杂的交互逻辑、提高Web应用性能和用户体验至关重要。
这不仅涉及基本的交互设计,还关系到网页性能优化,因为不当的事件处理可能会导致页面响应缓慢或消耗过多资源。同时,随着Web技术的发展,HTML5引入了更多新的事件和特性,但HTML4.0仍然是许多现有网站的基础,因此...
2. **touchmove**:在手指滑动过程中,浏览器会连续触发`touchmove`事件。我们需要在每次`touchmove`事件中更新触摸点的位置,并计算出手指滑动的距离。为了防止过度平滑,通常我们会设置一个阈值,只有当滑动距离...
【WEB服务监视器 1.0】是一款专用于监测WEB服务运行状态的工具,它能够实时监控Web应用程序的性能和稳定性,确保网站和服务的高效、可靠运行。此工具的使用对于IT管理员来说至关重要,因为它可以帮助他们及时发现并...
4. 对于连续快速触发的事件,考虑使用合成事件来优化性能。 总之,jQuery的合成事件是其优化事件处理的一个重要特性,它能够提高页面性能,减少资源消耗。理解和正确使用合成事件,对于提升Web应用的响应速度和用户...
### Spark Web UI 详解 #### 一、Spark Web UI 概览 Spark Web UI 是一个图形化的用户界面,用于监控正在运行的 Spark 应用程序的状态。它提供了丰富的信息,帮助用户了解应用程序的运行情况、性能瓶颈以及资源...
【web360全景项目】是一个利用JavaScript技术实现的创新性Web应用,旨在为用户提供全方位、立体化的视觉体验。在互联网领域,360度全景技术广泛应用在虚拟现实(VR)、旅游、房地产、室内设计等多个场景,使得用户...
- 专用的Web服务器捆绑数据库服务,如Oracle Web Server与Oracle数据库的紧密集成,提供了高性能的解决方案,但可能不兼容其他数据库系统。 Web_DB技术产品通常会扩展HTML标准,支持服务器端程序或脚本,并允许...
- **重复提交测试**:确保在网络延迟或用户快速连续操作时不会触发重复请求。 - **导航测试**:验证整个网站的导航结构是否连贯,链接跳转是否正常。 - **链接测试**:确认所有链接都能指向正确的目标,无死链。 ...
然而,在实际使用过程中,可能会遇到`WebBrowser.DocumentCompleted`事件被多次调用的问题,这可能导致程序逻辑错误或者性能问题。本文将详细解析这个问题的原因,并提供相应的解决方案。 `DocumentCompleted`事件...
例如,将500毫秒作为延迟时间,表面上看可以减少事件的触发频率,但如果用户在500毫秒内再次滚动,延迟的函数仍然会被加入到事件队列中并依次执行,这不能完全解决连续触发的问题。 一个更为合理的方法是利用条件...
Array SPX是一款高性能的分布式存储系统,其WebUI(Web用户界面)是管理员进行系统管理、监控和配置的主要工具。本手册V8.2.2版本详细介绍了如何使用WebUI来操作和管理Array SPX产品。 一、Array SPX产品概述 Array...
6. **链式操作(Chaining)**:jQuery对象返回的是jQuery实例,所以可以连续调用多个方法,如`$('p').css('color', 'red').hide().fadeIn(1000);` 7. **插件(Plugins)**:jQuery拥有庞大的插件生态系统,如...
以随机值的Rowkey(长度设定为2000字节)与固定值的Value(长度设定为4000字节)为例,测试采用连续插入500行Row并统计一次耗时的方法,旨在准确测量单次操作的时间消耗。这一设计考虑到HBase对Rowkey的排序处理,...
但在实际使用过程中,有时会出现IIS无故自动关闭停止的情况,这不仅会给维护人员带来困扰,还会影响到用户体验和服务的连续性。 #### 二、IIS自动停止的原因及解决办法 本文主要针对IIS应用程序池出现问题进行分析...
这意味着,即使事件在短时间内连续触发,节流函数也会按照预定的周期执行。例如,用于页面滚动的监听,每滚动一定距离执行一次更新布局的函数,即使用户快速滚动,也不会因为频繁调用而导致性能下降。 防抖和节流的...
1. **性能问题**:每个额外绑定的事件都会增加内存消耗,尤其是在高频率触发的事件如鼠标移动(`mousemove`)、键盘按键(`keydown`)等场景下,多次绑定同一事件可能会显著降低应用性能。 2. **行为异常**:对于...
这个库的核心目标是提供一个高效且易于集成的解决方案,让开发者能够轻松地在网页应用中实现对滑动、双击、长按等常见手势的支持。 ### 一、手势识别 AlloyFinger 支持多种常见的触摸手势,包括但不限于: 1. **...
而Notification Streaming Interface(在section 9.3中介绍)则提供了连续的数据流传输,适用于高频率或连续的事件情况,如视频流。 在ONVIF事件处理中,事件不仅仅是简单的触发信号,它们携带了丰富的信息,包括...