javascript监听程序包装器函数-removeListener

时间:2019-05-01 00:34:46

标签: javascript html css css3

我将此代码用作侦听器的包装函数,当我删除侦听器时,我想执行回调-我必须使用此“ callback()”,而不仅仅是removeEventListener回调参数中的回调。有人可以看看我在做什么吗

当我认为应该只是 el.removeEventlistener(事件,回调,捕获)

但是这可以代替我认为是错误的 el.removeEventlistener(event,callback(),capture)

已更新:

var evts = (function () {
  'use strict';

  var listeners = [],
      add,
      remove;

  add = function (evt, elem, fn, capture) {
    var callback = function (evt) {      
      fn.call(elem, evt, evt && evt.target ? evt.target : window.event.srcElement);
    };

    listeners.push({
      evt: evt,
      elem: elem,
      fn: fn,
      callback: callback,
      capture, capture,
      removed: false
    });

    if (elem.addEventListener) {
      elem.addEventListener(evt, callback, capture);
    } else if (elem.attachEvent) {
      elem.attachEvent('on' + evt, callback, capture);
    } else {
      elem['on' + evt] = callback;
    }
  };

  remove = function (evt, elem, fn, capture) {

    var callback = function (evt) {      
      fn.call(elem, evt, evt && evt.target ? evt.target : window.event.srcElement);
    };

    callback();

    listeners.forEach(function (obj, i) {
      if (obj.evt === evt && obj.elem === elem && 
          !obj.removed) {
        obj.removed = true;
        callback = obj.callback;
        listeners.splice(i, 1);
      }
    });

    if (elem.removeEventListener) {
      elem.removeEventListener(evt, callback, capture);
    } else if (elem.detachEvent) {
      elem.detachEvent('on' + evt, callback, capture);
    } else {
      elem['on' + evt] = null;
    }
  };

  return {
    add: add,
    remove: remove
  };
}());

0 个答案:

没有答案
相关问题