在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 更新 JavaScript 数组的 uniq 方法
Jan 23 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
Jul 15 Javascript
jQuery幻灯片特效代码分享--鼠标滑过按钮时切换(2)
Nov 18 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
微信小程序中的swiper组件详解
Apr 14 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
Sep 05 Javascript
vue-resource:jsonp请求百度搜索的接口示例
Nov 09 Javascript
JavaScript canvas实现跟随鼠标事件
Feb 10 Javascript
js+css3实现简单时钟特效
Sep 13 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
php写的简易聊天室代码
2011/06/04 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
php面向对象重点知识分享
2019/09/27 PHP
JS实现匀速运动的代码实例
2013/11/29 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python 互换字典的键值对实例
2019/02/12 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
大学生找工作推荐信范文
2013/11/28 职场文书
实习评语大全
2014/04/26 职场文书
村级个人对照检查材料
2014/08/22 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
在校学生证明格式
2015/06/24 职场文书
会议营销主持词
2015/07/03 职场文书
七夕情人节问候语
2015/11/11 职场文书
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android