js添加多个窗口监听事件
来源:互联网 发布:韦德巅峰场均数据 编辑:程序博客网 时间:2024/06/04 19:03
看过一个文章,说js有相对较多的瑕疵,对此,我是比较认同的,就如我将要说的js的窗口监听事件,如窗口改变大小事件需要定义window.resize函数。
但,相当多的情况是:不只在一地方或者一个时刻监听window.resize,此时就需要有多个回调函数,如果再定义window.resize函数就会覆盖之前定义好的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 事件多次执行的 buglazy = 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);
定义一个这个的方法,之后使用该方法:
function onResizeEvent() {console.log(window.innerWidth, window.innerHeight);}onWindowResize.add(onResizeEvent);
完毕。
阅读全文
0 0
- js添加多个窗口监听事件
- js监听窗口关闭事件
- JS 添加/删除事件监听
- js 监听窗口关闭或刷新事件
- JS 给多个对象添加事件
- Ext Js 添加 按钮 监听事件
- 如何为js控件添加事件监听
- JS事件监听的添加方法
- JS事件监听的添加方法
- JS添加/绑定事件监听函数并传参数attachEvent和addEventListener兼容个浏览器
- 多个editText监听事件
- js监听和触发浏览器窗口关闭事件
- JS针对浏览器窗口关闭事件的监听方法
- android:动态创建多个按钮 并给每个按键添加监听事件
- 【Android开发学习30】动态创建多个按钮,并给每个按键添加监听事件
- android:动态创建多个按钮 并给每个按键添加监听事件
- JS实现监听事件,添加删除显示控件
- js动态创建的元素添加监听事件
- splay tree
- k近邻算法与kd树的创建和搜索
- 1019. 数字黑洞 (20) 一直不能通过
- 利用反射将数据库中的数据两表自动对接实现数据传输
- sqoop的安装
- js添加多个窗口监听事件
- poj 1066 判断线段相交 思维
- 16 多校 6
- ROS的参数服务器
- 纯干货12 2017年5月份-李宏毅-最新GAN中文视频教程分享
- 《Netty学习》(一)了解netty
- OpenCV框架介绍
- iOS蓝牙BLE开发
- 转载:table单元格内容自动换行