通过添加/删除 EventListener 切换文档 touchmove on/off

Toggling document touchmove on/off by adding / removing EventListener

我请求实现 lock/unlock 移动设备上的正文滚动功能,如下所示:

var myObj = {
 disableBodyScroll: function() {
    document.querySelector('body').addEventListener("touchmove", function(e) {
      e.preventDefault();
      return false;
    }, 
    {passive: false}
    ); 
  },
  enableBodyScroll: function() {
    document.querySelector('body').removeEventListener("touchmove", function(e) {
      e.preventDefault();
      return false;
    }, 
    {passive: false}
    ); 
  }
}

当我执行 myObj.disableBodyScroll() 时,它工作正常。 但是 myObj.enableBodyScroll() 它没有,我的卷轴保持锁定状态...

有什么可能的原因吗?

参考:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener

我认为是因为你没有传递相同的监听函数。您的启用和禁用函数都会创建一个新的 eventListener 函数。所以 removeEventListener 找不到 eventListener 引用

试试这个:

var myObj = {
        handleTouchMove: function (e) {
            e.preventDefault();
            return false;
        },
        disableBodyScroll: function() {
            document.querySelector('body').addEventListener("touchmove", myObj.handleTouchMove, {passive: false}
            );
        },
        enableBodyScroll: function() {
            document.querySelector('body').removeEventListener("touchmove", myObj.handleTouchMove, {passive: false}
            );
        }
    }