在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 相关文章推荐
关于文本框的一些限制控制总结~~
Apr 15 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
Dec 17 Javascript
js导出格式化的excel 实例方法
Jul 17 Javascript
jQuery针对各类元素操作基础教程
Aug 29 Javascript
Vue实现选择城市功能
May 27 Javascript
详解vue-cli 接口代理配置
Dec 13 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 Javascript
对Vue beforeRouteEnter 的next执行时机详解
Aug 25 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
优雅的elementUI table单元格可编辑实现方法详解
Dec 23 Javascript
Ajax请求时无法重定向的问题解决代码详解
Jun 21 Javascript
在vue中实现嵌套页面(iframe)
Jul 30 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/04/24 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
详解php协程知识点
2018/09/21 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
判断用户是否在线的代码
2011/03/05 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python反射的用法实例分析
2018/02/11 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
2018/12/13 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
奇怪的鱼:Weird Fish
2018/03/18 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
推荐信模板
2014/05/09 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
Python闭包的定义和使用方法
2022/04/11 Python