在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 相关文章推荐
DHTML 中的绝对定位
Nov 26 Javascript
模拟用户操作Input元素,不会触发相应事件
May 11 Javascript
Js 时间间隔计算的函数(间隔天数)
Nov 15 Javascript
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
详解JavaScript ES6中的Generator
Jul 28 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
Dec 12 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
May 01 jQuery
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
angularJS实现动态添加,删除div方法
Feb 27 Javascript
vue使用websocket的方法实例分析
Jun 22 Javascript
Ajax实现局部刷新的方法实例
Mar 31 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 强制下载文件代码
2010/10/24 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
javascript中的对象创建 实例附注释
2011/02/08 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python运算符重载用法实例
2015/05/28 Python
带你了解python装饰器
2017/06/15 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
应届生个人求职信模板
2013/11/26 职场文书
绩效管理实施方案
2014/03/19 职场文书
市场部经理岗位职责
2014/04/10 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS