在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 相关文章推荐
WordPress 照片lightbox效果的运用几点
Jun 22 Javascript
window.js 主要包含了页面的一些操作
Dec 23 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
Sep 06 Javascript
Node.js与PHP、Python的字符处理性能对比
Jul 06 Javascript
介绍一个简单的JavaScript类框架
Jun 24 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
Sep 13 Javascript
JavaScript获取function所有参数名的方法
Oct 30 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
Dec 19 Javascript
JS实现瀑布流布局
Oct 21 Javascript
完美解决axios跨域请求出错的问题
Feb 05 Javascript
vue webpack build资源相对路径的问题及解决方法
Jun 04 Javascript
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
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
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
浅谈Python 对象内存占用
2016/07/15 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
python去掉空白行的多种实现代码
2018/03/19 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
python爬虫用mongodb的理由
2020/07/28 Python
详解python中的闭包
2020/09/07 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
2014年设计师工作总结
2014/11/25 职场文书
小学教师工作总结2015
2015/04/07 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书