删除与限制函数一起使用的Scroll事件侦听器

时间:2014-09-23 16:59:37

标签: javascript

我有一个功能,我打电话给,在我的页面上打开一个特定的视图

function dayViewOpen(target){
         var date = getDate();
          ..
          ..
          ..
        document.addEventListener('scroll',throttle(function(event){
            scrollAddData(date);
        },10));
}

类似地,我有一个关闭特定视图的功能

 function dayViewClose(target){
        ..
        ..


    }

到目前为止一切都很完美。但是当我必须删除之前添加的事件监听器时,问题就开始出现了。即,当我调用函数dayViewclose();

时,我必须删除事件监听器

我知道我们需要一个引用侦听器来删除它,所以当我这样做的时候就这样。

var handler = throttle(function(event){
                scrollAddData();
            },10);

 function dayViewOpen(target){
         var date = getDate();
          ..
          ..
          ..
        document.addEventListener('scroll',handler,false);
}

 function dayViewClose(target){
        ..
        ..

        //remove earlier added event listener
       document.removeEventListener('scroll',handler,false);
    }
  • 然后我无法将日期参数传递给我的处理程序(如何将日期参数传递给处理程序)和
  • 即使我放开了日期参数,我也无法使用removeEvent Listener删除处理程序。 (如何正确删除事件监听器

任何帮助都会有很大帮助

1 个答案:

答案 0 :(得分:3)

您可以尝试在外部声明事件侦听器,但将其设置在内部:

var handler;

function dayViewOpen(target){
    var date = getDate();
    /* ... */
    handler = throttle(function(event){
        scrollAddData(date);
    }, 10);
    document.addEventListener('scroll', handler, false);
}

function dayViewClose(target){
    /* ... */
    document.removeEventListener('scroll', handler, false);
}