在IE浏览器中resize事件执行多次的解决方法


Posted in Javascript onJuly 12, 2011

这是个让人每次改变页面窗口的大小时很郁闷的方法,尤其在IE浏览器中,稍微动下窗口边框,就会触发很多次事件。更让人蛋疼的是在resize事件中包含某些页面内容处理或计算导致resize事件再次被触发的时候,IE会随机陷入假死状态。
网上找了好久,都是千律一篇的,到处都是转载的一个方法;以下是网上找到的一个解决方法:

var resizeTimer = null; 
$(window).resize(function() { 
if (resizeTimer) clearTimeout(resizeTimer); 
resizeTimer = setTimeout("changeHeight()", 500); 
});//resize事件延迟500毫秒执行

这个方法虽然可以解决多次执行事件问题,但是不完美,最后我找到了一个jquery插件形式的解决方案;
/* 
=============================================================================== 
WResize is the jQuery plugin for fixing the IE window resize bug 
............................................................................... 
Copyright 2007 / Andrea Ercolino 
------------------------------------------------------------------------------- 
LICENSE: http://www.opensource.org/licenses/mit-license.php 
WEBSITE: http://noteslog.com/ 
=============================================================================== 
*/ 
( function( $ ) 
{ 
$.fn.wresize = function( f ) 
{ 
version = '1.1'; 
wresize = {fired: false, width: 0}; 
function resizeOnce() 
{ 
if ( $.browser.msie ) 
{ 
if ( ! wresize.fired ) 
{ 
wresize.fired = true; 
} 
else 
{ 
var version = parseInt( $.browser.version, 10 ); 
wresize.fired = false; 
if ( version < 7 ) 
{ 
return false; 
} 
else if ( version == 7 ) 
{ 
//a vertical resize is fired once, an horizontal resize twice 
var width = $( window ).width(); 
if ( width != wresize.width ) 
{ 
wresize.width = width; 
return false; 
} 
} 
} 
} 
return true; 
} 
function handleWResize( e ) 
{ 
if ( resizeOnce() ) 
{ 
return f.apply(this, [e]); 
} 
} 
this.each( function() 
{ 
if ( this == window ) 
{ 
$( this ).resize( handleWResize ); 
} 
else 
{ 
$( this ).resize( f ); 
} 
} ); 
return this; 
}; 
} ) ( jQuery );

你可以把上面的代码另存为jquery.wresize.js导入网页,把以下代码拷贝到记事本中,另存为网页,然后测试一下。示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" style="overflow:hidden;"> 
<head> 
<title> test window resize </title> 
<script type="text/javascript" src="http://jquery.com/src/jquery-latest.pack.js"></script> 
<script type="text/javascript" src="jquery.wresize.js"></script> 
<script type="text/javascript"> 
jQuery( function( $ ) 
{ 
function content_resize() 
{ 
var w = $( window ); 
var H = w.height(); 
var W = w.width(); 
$( '#content' ).css( {width: W-20, height: H-20} ); 
} 
$( window ).wresize( content_resize ); 
content_resize(); 
} ); 
</script> 
</head> 
<body> 
<div id="content" style="border: 1px dashed silver; position:absolute; overflow:auto;"> 
test test testtest test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test 
</div> 
</body> 
</html>
Javascript 相关文章推荐
基于Jquery的简单&amp;简陋Tabs插件代码
Feb 09 Javascript
jQuery学习总结之jQuery事件
Jun 30 Javascript
封装好的一个万能检测表单的方法
Jan 21 Javascript
JavaScript中函数(Function)的apply与call理解
Jul 08 Javascript
跟我学习javascript的函数调用和构造函数调用
Nov 16 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
May 30 Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 Javascript
jQuery判断自定义属性data-val用法示例
Jan 07 jQuery
JavaScript设计模式之观察者模式实例详解
Jan 16 Javascript
世界上最短的数字判断js代码
Sep 09 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
Jul 21 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
Jul 12 #Javascript
Jquery进度条插件 Progress Bar小问题解决
Jul 12 #Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
Jul 11 #Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
Jul 11 #Javascript
jQuery :nth-child前有无空格的区别分析
Jul 11 #Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
Jul 11 #Javascript
jquery中防刷IP流量软件影响统计的一点对策
Jul 10 #Javascript
You might like
php gzip压缩输出的实现方法
2013/04/27 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
一页面多XMLHttpRequest对象
2007/01/22 Javascript
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
js下用gb2312编码解码实现方法
2009/12/31 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
[46:00]Ti4 冒泡赛第二轮LGD vs C9 2
2014/07/14 DOTA
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
“学雷锋活动月”总结
2014/03/09 职场文书
保险内勤岗位职责
2014/04/05 职场文书
实习介绍信范文
2015/05/05 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
话题作文之学会尊重
2019/12/16 职场文书
html粘性页脚的具体使用
2022/01/18 HTML / CSS
详解Vue3使用axios的配置教程
2022/04/29 Vue.js