在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 常用方法基础教程
Feb 06 Javascript
javascript笔记 String类replace函数的一些事
Sep 22 Javascript
jQuery实现倒计时按钮功能代码分享
Sep 03 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 Javascript
javascript限制文本框输入值类型的方法
May 07 Javascript
jquery.flot.js简单绘制折线图用法示例
Mar 13 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 Javascript
JS实现的判断方法、变量是否存在功能示例
Mar 28 Javascript
vue.js实现的绑定class操作示例
Jul 06 Javascript
vue解决一个方法同时发送多个请求的问题
Sep 25 Javascript
javascript实现弹出层效果
Dec 10 Javascript
原生jQuery实现只显示年份下拉框
Dec 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入门小知识
2008/03/24 PHP
PHP form 表单传参明细研究
2009/07/17 PHP
在PHP中使用redis
2013/11/04 PHP
在win7中搭建Linux+PHP 开发环境
2014/10/08 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
xml转json的js代码
2012/08/28 Javascript
JS跨域总结
2012/08/30 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
js中less常用的方法小结
2017/08/09 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
python转换摩斯密码示例
2014/02/16 Python
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python socket编程实例详解
2015/05/27 Python
Python中协程用法代码详解
2018/02/10 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
生产管理的三大手法
2013/11/11 职场文书
春游踏青活动方案
2014/08/14 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL