在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 相关文章推荐
js树形控件脚本代码
Jul 24 Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
JSP跨iframe如何传递参数实现代码
Sep 21 Javascript
快速解决FusionCharts联动的中文乱码问题
Dec 04 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
Jun 05 Javascript
jQuery .tmpl() 用法示例介绍
Aug 21 Javascript
js判断一个字符串是否包含一个子串的方法
Jan 26 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
Jun 12 Javascript
JS中微信小程序自定义底部弹出框
Dec 22 Javascript
js中创建对象的几种方式
Feb 05 Javascript
详解Node.js中的Async和Await函数
Feb 22 Javascript
jquery实现的放大镜效果示例
Feb 24 jQuery
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 文件类型判断代码
2009/03/13 PHP
PHP Socket 编程
2010/04/09 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
php判断linux下程序问题实例
2015/07/09 PHP
PHP微信分享开发详解
2017/01/14 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
2020/03/23 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
Js中获取frames中的元素示例代码
2013/07/30 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
Angular2.js实现表单验证详解
2017/06/23 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python常用随机数与随机字符串方法实例
2015/04/09 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
使用Python实现音频双通道分离
2020/12/25 Python
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
应届生求职推荐信
2013/10/28 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
写给同学的新学期寄语
2015/02/27 职场文书
交通安全教育心得体会
2016/01/15 职场文书
远程教育学习心得体会
2016/01/23 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server