Kentavr16
@Kentavr16
long cold winter

Есть простой способ контроля событий прокрутки?

Решил реализовать в своем проекте скролл поэкранно. И неожиданно нарвался на ряд сложностей. Оказывается, чтобы в реакте отключить поведение по умолчанию, нужно использовать целый ряд уловок с хуками. В моем случае чтобы добиться скролла поэкранно была написана следующая реализация:
// реф для отслеживания того, скролится ли элемент в данный момент
const active = useRef(true)
//реф для корректной установки прослущивателя событий
const myref = useRef<HTMLInputElement>(null);

    useEffect(() => {

        if (myref.current) {
            myref.current.addEventListener('wheel', (e: WheelEvent) => {
                e.preventDefault();
                if (active.current) {
                    active.current = false
                    setTimeout(() => {
                        if (e.deltaY > 0) {
                            let windowHeigth = document.documentElement.clientHeight
                            window.scrollBy(0, windowHeigth)
                        }
                        if (e.deltaY < 0) {
                            let windowHeigth = document.documentElement.clientHeight
                            window.scrollBy(0, -windowHeigth)
                        }
                    }, 300)
                    setTimeout(() => {
                        active.current = true
                    }, 500)
                }
            }, { passive: false });
        }
    }, [])
    return (
        <div ref={myref}>... остальной код...


Можно ли упростить этот разгул порнографии в коде? Я что-то упустил, или возможно есть какие-то библиотеки?
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
@formasters777
возможно есть библиотеки, которые делают это по другому, более кратко снаружи(методы),
но внутри них скорей всего будет подобное.
react по сути прослойка между DOM реальным и виртуальным, поэтому если Вы не сделаете компонент "управляемым", у Вас не будет доступа к его свойствам для регулировки.
Но, если разместить код в тег script, написанный на чистом js, в уже скомпилированной версии,
может он будет работать сам по себе, а react отдельно?


Main page
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы