Как включить колесико мыши в chrome? - PullRequest
1 голос
/ 07 мая 2020

Я отключаю колесо мыши с помощью javascript, когда прокручиваю страницу до специального блока. Я использую много методов, но все они работали в firefox, а не в chrome. Для chrome я нахожу специальный метод с preventDefault. Но я не знаю, как их включить. Это код:

const options = {
    rootMargin: "-400px"
};

const observer = new IntersectionObserver(function (entries, observer) {
    entries.forEach(entry => {
        console.log(entry.isIntersecting);
        if (entry.isIntersecting === true) {
            document.querySelector('body').classList.add('fixed');
            document.body.addEventListener('wheel', function (e) {
                e.preventDefault();
            }, {passive: false});

            $('html, body').animate({
                scrollTop: scrollCenter
            }, 1000);

            setTimeout(function () {
                document.querySelector('body').classList.remove('fixed');
                document.body.addEventListener('wheel', function (e) {
                    // override prevented flag to prevent jquery from discarding event
                    e.isDefaultPrevented = function () {
                        return false;
                    }
                });
            }, 1000);

        }
    });
}, options);

observer.observe(produtsBlock);

Спасибо за помощь.

1 Ответ

2 голосов
/ 07 мая 2020

Объединение слушателя в стек для аннулирования предыдущего слушателя сложно, поскольку они запускаются в последовательности FIFO.

Некоторые параметры:

1. Удаление слушателя

Вы можете удалить блокирующий слушатель по истечении этого периода времени.

С именованной функцией:


const prevent = (e) => e.preventDefault();
document.body.addEventListener('wheel', prevent, { passive: false });

Вы можете удалить его позже:


setTimeout(function () {
  document.querySelector('body').classList.remove('fixed');
  document.body.removeEventListener('wheel', prevent);
}, 1000);

2. Использование флага

Использование флага состояния для обработки preventDefault.

const state = { prevent: true };

const prevent = (e) => {
  if (state.prevent) {
    e.preventDefault();
  }
};

document.body.addEventListener("wheel", prevent, { passive: false });

Затем измените флаг:

setTimeout(function () {
  document.querySelector("body").classList.remove("fixed");
  state.prevent = false;
}, 1000);
...