在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 相关文章推荐
JavaScript让IE浏览器event对象符合W3C DOM标准
Nov 24 Javascript
js动态创建、删除表格示例代码
Aug 07 Javascript
jquery使用animate方法实现控制元素移动
Mar 27 Javascript
javascript先序遍历DOM树的方法
Feb 27 Javascript
javascript 秒表计时器实现代码
Mar 09 Javascript
JS+CSS实现下拉刷新/上拉加载插件
Mar 31 Javascript
node.js操作MongoDB的实例详解
Oct 11 Javascript
vue内置指令详解
Apr 03 Javascript
element-ui 限制日期选择的方法(datepicker)
May 16 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
在小程序Canvas中使用measureText的方法示例
Oct 19 Javascript
基于JS实现视频上传显示进度条
May 12 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/11/27 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
利用JS进行图片的切换即特效展示图片
2013/12/03 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
javascript 取小数点后几位几种方法总结
2017/08/02 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
Python多线程编程(八):使用Event实现线程间通信
2015/04/05 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
使用python实现接口的方法
2017/07/07 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python3 合并二叉树的实现
2019/09/30 Python
python with (as)语句实例详解
2020/02/04 Python
python实现贪吃蛇双人大战
2020/04/18 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
python 安装移动复制第三方库操作
2020/07/13 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
大课间体育活动方案
2014/03/12 职场文书
质检员岗位职责
2015/02/03 职场文书
求职简历自我评价2015
2015/03/10 职场文书
运动会广播稿300字
2015/08/19 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
Python的三个重要函数详解
2022/01/18 Python
python获取字符串中的email
2022/03/31 Python
 python中的元类metaclass详情
2022/05/30 Python