原理是利用setTimeout让resize事件和scroll事件在一定的时间内只执行一次,如下代码执行的话,浏览器会执行多次,甚至死掉:
(function(){ window.onresize=function(){ alert(0); } })()
只要用户改变窗口大小,会对内部一些元素大小重新计算,可能导致整个页面重新渲染,最终导致大量消耗 CPU。比如调用 resize 方法,用户改变窗口大小时会不停的被触发, 低版本的IE 会可能陷入假死状态。window的scroll事件也是如此,鼠标滚动或拖动滚动条,就会不停的触发scroll事件,如果处理的东西多,低版本的IE 也会陷入假死状态。
优化代码如下:
//解决方法 var resizeTimer = null; window.onresize=function(){ if (resizeTimer) { clearTimeout(resizeTimer) } resizeTimer = setTimeout(function(){ alert(0); }, 400); } <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>resize和scroll事件的优化,防止浏览器死掉</title> </head> <body> <script type="text/javascript"> //执行这代码,浏览器会死掉,只要用户改变窗口大小,会对内部一些元素大小重新计算,可能导致整个页面重新渲染,最终导致大量消耗 CPU。比如调用 resize 方法,用户改变窗口大小时会不停的被触发, 低版本的IE 会可能陷入假死状态。window的scroll事件也是如此,鼠标滚动或拖动滚动条,就会不停的触发scroll事件,如果处理的东西多,低版本的IE也会陷入假死状态。 /*(function(){ window.onresize=function(){ alert(0); } })()*/ //解决方法 var resizeTimer = null; window.onresize=function(){ if (resizeTimer) { clearTimeout(resizeTimer) } resizeTimer = setTimeout(function(){ alert(0); }, 400); } </script> </body> </html>
相关推荐
window的scroll事件也是如此,鼠标滚动或拖动滚动条,就会不停的触发scroll事件,如果处理的东西多,低版本的IE也会陷入假死状态。 基本的优化思路:在一定的时间之内,只执行一次resize事件函数。 代码如下: var ...
浏览器窗口大小变化时使用resize事件对框架不起作用的解决办法,如下: 代码如下:$(window).resize(function(){var surH = $(window).height();$(“.pic_conent”).height(surH);} 当浏览器变化,拉大拉小时,没有...
笔者最近学习发现了一种神奇的方法,通过 scroll 事件来间接实现 resize 事件的监听,本文将对这种方式进行原理的剖析与代码实现。 原理 首先,我们先来看一下 scroll 事件是干嘛的。 The scroll event is fired ...
JavaScript+jQuery 网页特效设计 jQuery-窗口、表单事件 1、窗口事件 1.1 ready事件 VS onload事件 ...1、窗口事件_ scroll事件 x=0; $(document).ready(function(){ $("div").scroll(function(){ $("s
前端项目-javascript-detect-element-resize,基于事件的跨浏览器元素大小调整检测
如今,浏览器支持使用本机处理元素大小调整。 该库使用这些观察者来帮助您处理React中的元素大小。 :front-facing_baby_chick: 小 :panda: 用TypeScript编写 :lion: 支持功能和类组件 :tropical_fish: 被 :...
解决firefox下resize事件无效问题
元素调整大小检测器针对元素的优化的跨浏览器调整大小侦听器。 比相关方法快37倍(请参阅第5节)。 npm install element-resize-detector用法在浏览器中包含脚本: < script src =" node_modules/element-resize-...
resize事件演示.html
当收到此消息, 消息循环输入来过滤掉除对两, WM _ MOUSEMOVE 和 WM _ LBUTTONUP 所有鼠标消息。 RESIZE 应用程序接收到 WM _ MOUSEMOVE 消息, 时检查以查看放大或缩小如果当前鼠标位置将使窗口。 如果窗口是小, ...
需求 开发过程中经常遇到的一个问题就是如何监听一个div的size变化。 比如我用canvas绘制了一个chart,当canvas的size发生...对于div的resize事件的监听,实现方式有很多,比如周期性检查,通过scroll事件等等,本文
通过resize事件实现随着窗口大小的变化里面的控件大小也随之变化,left,top等等上下左右都会随动
resizeWindow.txt resizeWindow.txt resizeWindow.txtresizeWindow.txtresizeWindow.txt resizeWindow.txt resizeWindow.txt resizeWindow.txt
jquery插件ez-bg-resize背景自适应浏览器的大小.zip
jquery的resize()事件,直接调用没有起作用引入该文件来实现resize()方法。
这是IE6和IE7的一个比较广为认知的问题,这个问题在这两个版本的浏览器中表现有所不同,通常IE6下会比IE7下更为糟糕。 现在已经有了一个较好的解决方案,让jquery.wresize.js这个jquery插件来帮你: Js代码 代码如下...
易语言模块ReSize.rar 易语言模块ReSize.rar 易语言模块ReSize.rar 易语言模块ReSize.rar 易语言模块ReSize.rar 易语言模块ReSize.rar