scrollIntoView с плавным поведением, не работающим в хроме при вызове события колеса

Это немного сложно объяснить, поэтому, возможно, самый простой способ понять проблему — перейти на веб-сайт и сравните поведение между Firefox (работает отлично, как и ожидалось) и Chrome (scrollIntoView не работает).

По сути, у меня есть меню левого столбца, но я не хотел указывать позицию: фиксированную, поэтому она относительная с плавающей запятой. Таким образом, прокрутка для основного содержимого имеет значение overflow-y on .

Теперь у меня есть «приветственное» изображение, занимающее всю высоту экрана посетителя. Поведение, которое я создал, заключается в том, что когда посетитель прокручивает страницу вниз, он переходит прямо к концу изображения. И когда посетитель находится чуть ниже изображения и прокручивает немного вверх, он переходит прямо к верхней части изображения. Кроме того, прокрутка в тексте работает нормально.

Все работает нормально с Firefox, но Chrome не прокручивается, как ожидалось. См. файл scroll.js на веб-сайте, указанном выше, console.log показывает, что хром перехватывает событие колеса и входит в scrollIntoView, но не прокручивается.

Это ошибка в хроме, о которой я должен сообщить?

Благодарность


person Fla    schedule 07.05.2018    source источник


Ответы (1)


Вы должны посмотреть на значение WheelEvent.deltaMode, чтобы узнать, как браузер сообщает о событии колеса:

WheelEvent.deltaMode

Только чтение

Возвращает unsigned long, представляющий единицу величины прокрутки дельта-значений. Допустимые значения:

Constant Value Description

DOM_DELTA_PIXEL 0x00 The delta values are specified in pixels.

DOM_DELTA_LINE 0x01 The delta values are specified in lines.

DOM_DELTA_PAGE 0x02 The delta values are specified in pages.

Хорошей библиотекой для стандартизации событий колеса в разных браузерах является https://github.com/basilfx/normalize-wheel

person dave    schedule 07.05.2018
comment
Спасибо, но я не думаю, что это проблема. Если вы проверите console.log, хром входит в функцию, как и ожидалось. Ошибка заключается в вызове scrollIntoView с установленным поведением smooth. - person Fla; 08.05.2018