js заболкировать прокуртку (onmousewheel event passive) без warning в консоли

93
27 января 2020, 07:50

Если написать такой код:

document.querySelector('select[name=month]').onmousewheel = function (e) {
    e.preventDefault();
};

То в консоль получаю такую ошибку:

Added non-passive event listener to a scroll-blocking 'wheel' event. Consider marking event handler as 'passive' to make the page more responsive. See https://www.chromestatus.com/feature/5745543795965952

Намекая на то чтоб я делал "пасивную" не блокирующую оброботку события, чтоб увеличить скорость прокрутки. Чтоб я делал типа так:

document.querySelector('select[name=month]').addEventListener('mousewheel', onmousewheel, {passive: true});

Но дело в том что мне как раз таки нужно блочить прокрутку. И я не хочу в консоль ворнинги. Пример такого случая (код можно запустить, нужно крутить колесиком на select-е):

document.querySelector('select[name=month]').onmousewheel = 
document.querySelector('select[name=year]').onmousewheel = function (e) { 
 
    e.preventDefault(); 
 
    const options = this.options; 
    const newSelectIndex = options.selectedIndex 
        + ((e.deltaY < 0) ? -1 : 1); 
 
    if (options[newSelectIndex]) { 
        options.selectedIndex = newSelectIndex; 
    } 
};
<form style="text-align:center"> 
    <select name="month"> 
        <option value="1"> January</option> 
        <option value="2"> February</option> 
        <option value="3"> March</option> 
        <option value="4">April</option> 
        <option value="5"> May</option> 
        <option selected="selected" value="6"> June</option> 
        <option value="7"> July</option> 
        <option value="8"> August</option> 
        <option value="9"> September</option> 
        <option value="10"> October</option> 
        <option value="11"> November</option> 
        <option value="12"> December</option> 
    </select> 
    <select name="year"> 
        <option value="2019">2019</option> 
        <option selected="selected" value="2018">2018</option> 
        <option value="2017">2017</option> 
    </select> 
</form>

Подскажите как блочить прокрутку без ворнингов. Большое спасибо!

Answer 1

Ребята, извините, это на столько тупо)) Методом тыка выяснилось что нужно выставить просто {passive: false} тогда отдично работает e.preventDefault(); и не ругается

document.querySelector('select[name=month]')
    .addEventListener('mousewheel', onmousewheel, {passive: false});

Всем большое спасибо!

READ ALSO
Google Extensions запуск скрипта

Google Extensions запуск скрипта

Я искал, но так и не нашел, что-то похожее на мою проблемуВопрос в том, как запускать скрипт в какой-либо промежуток времени

114
Можно ли получить доступ к объекту функции в явном виде?

Можно ли получить доступ к объекту функции в явном виде?

Как можно получить доступ к объекту функции в явном виде? Вот код:

115
Amplitude.js и Ajax

Amplitude.js и Ajax

Как работать с Amplitudejs через Ajax? Если страница загружена динамически, то инициализация не происходит

118