修复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

相关文章

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的丢失是其中比较

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

电脑提示msvcp90.dll缺少怎么办? MSVCP90.dll文件丢失的修复方法

《电脑提示msvcp90.dll缺少怎么办?MSVCP90.dll文件丢失的修复方法》今天我想和大家分享的主题是关于在使用软件时遇到的一个问题——msvcp90.dll丢失,相信很多老师在使用电脑时... 在计算机使用过程中,可能会遇到 MSVCP90.dll 丢失的问题。MSVCP90.dll 是 Mic

电脑报错cxcore100.dll丢失怎么办? 多种免费修复缺失的cxcore100.dll文件的技巧

《电脑报错cxcore100.dll丢失怎么办?多种免费修复缺失的cxcore100.dll文件的技巧》你是否也遇到过“由于找不到cxcore100.dll,无法继续执行代码,重新安装程序可能会解... 当电脑报错“cxcore100.dll未找到”时,这通常意味着系统无法找到或加载这编程个必要的动态链接库

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的