开发者社区> 问答> 正文

写一个通用的事件侦听器函数

写一个通用的事件侦听器函数

展开
收起
kun坤 2019-11-28 14:16:31 368 0
1 条回答
写回答
取消 提交回答
  • // event(事件)工具集,来源:https://github.com/markyun
    markyun.Event = {
      // 页面加载完成后
      readyEvent: function(fn) {
        if (fn == null) {
          fn = document;
        }
        var oldonload = window.onload;
        if (typeof window.onload != "function") {
          window.onload = fn;
        } else {
          window.onload = function() {
            oldonload();
            fn();
          };
        }
      },
      // 视能力分别使用dom0||dom2||IE方式 来绑定事件
      // 参数: 操作的元素,事件名称 ,事件处理程序
      addEvent: function(element, type, handler) {
        if (element.addEventListener) {
          //事件类型、需要执行的函数、是否捕捉
          element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
          element.attachEvent("on" + type, function() {
            handler.call(element);
          });
        } else {
          element["on" + type] = handler;
        }
      },
      // 移除事件
      removeEvent: function(element, type, handler) {
        if (element.removeEnentListener) {
          element.removeEnentListener(type, handler, false);
        } else if (element.datachEvent) {
          element.detachEvent("on" + type, handler);
        } else {
          element["on" + type] = null;
        }
      },
      // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
      stopPropagation: function(ev) {
        if (ev.stopPropagation) {
          ev.stopPropagation();
        } else {
          ev.cancelBubble = true;
        }
      },
      // 取消事件的默认行为
      preventDefault: function(event) {
        if (event.preventDefault) {
          event.preventDefault();
        } else {
          event.returnValue = false;
        }
      },
      // 获取事件目标
      getTarget: function(event) {
        return event.target || event.srcElement;
      },
      // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
      getEvent: function(e) {
        var ev = e || window.event;
        if (!ev) {
          var c = this.getEvent.caller;
          while (c) {
            ev = c.arguments[0];
            if (ev && Event == ev.constructor) {
              break;
            }
            c = c.caller;
          }
        }
        return ev;
      }
    };
    
    
    2019-11-28 14:16:51
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
fibjs 模块重构从回调到协程--陈垒 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载