1

I m trying to lock and unlock scroll interactions like this answer.

My Code


var preventDefault = function (e) {
  e.preventDefault();
};

var preventDefaultSpecialKey = function (e) {
  if (this.keys[e.keyCode]) {
    preventDefault(e);
    return false;
  }
};

class Loader {
  keys = { 37: 1, 38: 1, 39: 1, 40: 1 };
  supportPassive = false;

  get option() { return this.supportPassive ? { passive: false } : false; }
  get event() { return "onwheel" in document.createElement("div") ? "wheel" : "mousewheel"; }

  constructor() {
    try {
      const sP = () => (this.supportPassive = true);
      window.addEventListener("test",null,
        Object.defineProperty({}, "passive", { get: sP })
      );
    } catch (e) {}
  }

  open() {
    window.addEventListener("DOMMouseScroll", preventDefault, false);
    window.addEventListener(this.event, preventDefault, this.option);
    window.addEventListener("touchmove", preventDefault, this.option);
    window.addEventListener(
      "keydown",
      preventDefaultSpecialKey.bind(this),
      false
    ); // Special keys
  }

  close() {
    window.removeEventListener("DOMMouseScroll", preventDefault, false); // Throw warning on Firefox
    window.removeEventListener(this.event, preventDefault, this.option); // Throw error on Chrome
    window.removeEventListener("touchmove", preventDefault, this.option);
    window.removeEventListener(
      "keydown",
      preventDefaultSpecialKey.bind(this),
      false
    );
  }
}

Google Chrome -- Version 96.0.4664.93 (x64)

open method work as well, but after call close, window.removeEventListener(this.event, preventDefault, this.option); that throw an error: "Unable to preventDefault inside passive event listener due to target being treated as passive." when I trying scroll.

Firefox - Version 95.0 (x64)

open method work too, but after call close, window.removeEventListener("DOMMouseScroll", preventDefault, false); that throw the next warning (only one time): "The "preventDefault()" call on a "DOMMouseScroll" event from a listener registered as "passive" was ignored." when I trying scroll.

I dont understand why error/warning is throwed, because I only remove event and not adding.

Any help will be much appreciate .

0 Answers0