在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插件之easing 动态菜单
Aug 21 Javascript
qTip2 精致的基于jQuery提示信息插件
Feb 17 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
Dec 23 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
Jun 28 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
Apr 07 Javascript
js闭包学习心得总结
Apr 17 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
Sep 18 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
Nov 21 Javascript
微信小程序实现保存图片到相册功能
Nov 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源码之 ext/mysql扩展部分
2009/07/17 PHP
Yii学习总结之安装配置
2015/02/22 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
浅谈JS中几种轻松处理'this'指向方式
2019/09/16 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
python encode和decode的妙用
2009/09/02 Python
Python单例模式实例分析
2015/01/14 Python
Python求算数平方根和约数的方法汇总
2016/03/09 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
华三通信H3C面试题
2015/05/15 面试题
商务助理岗位职责
2013/11/13 职场文书
个人银行贷款担保书
2014/04/01 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
开场白怎么写
2015/06/01 职场文书
社区服务理念口号
2015/12/25 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫