在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 相关文章推荐
JS实现跟随鼠标立体翻转图片的方法
May 04 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
Aug 10 Javascript
Bootstarp风格的toggle效果分享
Feb 23 Javascript
JS作为值的函数用法示例
Jun 20 Javascript
jQuery autoComplete插件两种使用方式及动态改变参数值的方法详解
Oct 24 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
Dec 21 Javascript
js 监控iframe URL的变化实例代码
Jul 12 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
Sep 30 Javascript
360doc网站不登录就无法复制内容的解决方法
Jan 27 Javascript
基于jquery实现左右上下移动效果
May 02 jQuery
JavaScript类数组对象转换为数组对象的方法实例分析
Jul 24 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删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
php模板引擎技术简单实现
2016/03/15 PHP
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
Document 对象的常用方法
2009/07/31 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
遗传算法python版
2018/03/19 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
python装饰器常见使用方法分析
2019/06/26 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
pandas DataFrame运算的实现
2020/06/14 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
竞选学生会主席演讲稿
2014/04/24 职场文书
难忘的一课教学反思
2014/04/30 职场文书
常务副总经理任命书
2014/06/05 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
文艺演出主持词
2015/07/01 职场文书
教育教学工作反思
2016/02/24 职场文书
Nginx限流和黑名单配置
2022/05/20 Servers