修复lte ie8 chrome 下window 的resize 事件多次执行

2024-03-25 01:58

本文主要是介绍修复lte ie8 chrome 下window 的resize 事件多次执行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/**
* window.onresize 事件 专用事件绑定器 v0.1 Alucelx
* http://www.cnblogs.com/Alucelx/archive/2011/10/20/2219263.html
* <description>
*   用于解决 lte ie8 & chrome 及其他可能会出现的 原生 window.resize 事件多次执行的 BUG.
* </description>
* <methods>
*   add: 添加事件句柄
*   remove: 删除事件句柄
* </methods>
*/
var  onWindowResize = function (){
     //事件队列
     var  queue = [],
     indexOf = Array.prototype.indexOf || function (){
         var  i = 0, length = this .length;
         for ( ; i < length; i++ ){
             if ( this [i] === arguments[0]){
                 return  i;
             }
         }
         return  -1;
     };
     var  isResizing = {}, //标记可视区域尺寸状态, 用于消除 lte ie8 / chrome 中 window.onresize 事件多次执行的 bug
     lazy = true , //懒执行标记
     listener = function (e){ //事件监听器
         var  h = window.innerHeight || (document.documentElement && document.documentElement.clientHeight) || document.body.clientHeight,
             w = window.innerWidth || (document.documentElement && document.documentElement.clientWidth) || document.body.clientWidth;
         if ( h === isResizing.h && w === isResizing.w){
             return ;
         } else {
             e = e || window.event;
         
             var  i = 0, len = queue.length;
             for ( ; i < len; i++){
                 queue[i].call( this , e);
             }
             isResizing.h = h,
             isResizing.w = w;
         }
     }
     return  {
         add: function (fn){
             if ( typeof  fn === 'function' ){
                 if (lazy){ //懒执行
                     if (window.addEventListener){
                         window.addEventListener( 'resize' , listener, false );
                     } else {
                         window.attachEvent( 'onresize' , listener);
                     }
                     lazy = false ;
                 }
                 queue.push(fn);
             } else {  }
             return  this ;
         },
         remove: function (fn){
             if ( typeof  fn === 'undefined' ){
                 queue = [];
             } else  if ( typeof  fn === 'function' ){
                 var  i = indexOf.call(queue, fn);
                 if (i > -1){
                     queue.splice(i, 1);
                 }
             }
             return  this ;
         }
     };
}.call( this );

绑定window 的 resize 事件,请使用这个对象

示例:

?
var  _fn = function (){document.body.innerHTML += "1" };
onWindowResize.add(_fn)
     .add( function (){document.body.innerHTML += "2" })
     .add( function (){document.body.innerHTML += "3" })
     .remove(_fn);

这篇关于修复lte ie8 chrome 下window 的resize 事件多次执行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843499

相关文章

MySQL中SQL的执行顺序详解

《MySQL中SQL的执行顺序详解》:本文主要介绍MySQL中SQL的执行顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql中SQL的执行顺序SQL执行顺序MySQL的执行顺序SELECT语句定义SELECT语句执行顺序总结MySQL中SQL的执行顺序

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较