Как замедлить скорость прокрутки в Microsoft Edge с помощью JavaScript?

В Microsoft Edge удержание клавиши со стрелкой вниз на любой веб-странице прокручивает страницу вниз с невероятно высокой скоростью. Хотя Edge основан на Chromium, на Google Chrome это не влияет.

Вот пример использования 250 абзацев Lorem Ipsum.

В Chrome это прокручивается на пару абзацев в секунду. В Edge это прокручивает десятки абзацев в секунду.

Клавиши со стрелками вверх/вниз создают ужасный пользовательский опыт на нашем веб-сайте в Edge.

Как мы можем контролировать скорость прокрутки нашего веб-сайта в Edge с помощью JavaScript?

Край: Как замедлить скорость прокрутки в Microsoft Edge с помощью JavaScript?

Хром: Как замедлить скорость прокрутки в Microsoft Edge с помощью JavaScript?

О, никогда не знал, что Edge прокручивается так быстро. У вас всегда есть возможность прокрутить один экран за клик space.😊

deEr. 17.05.2024 17:18
edge://flags/ --> "Windows Scrolling Personality" --> disable. Хотя это, очевидно, не общий ответ для всех пользователей.
JonSG 17.05.2024 17:20

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

Danny Beckett 17.05.2024 17:21

Я не могу это повторить. Когда я использую клавиши со стрелками в Edge, это не что иное, как «десятки абзацев в секунду».

T.J. Crowder 17.05.2024 17:21

@T.J.Crowder Возможно, это зависит от версии ОС. Я использую Windows 11 23H2 22631.3447 на Edge 124.0.2478.105. Это совершенно новая установка Windows, сделанная за последнюю неделю или около того. Проблему можно наблюдать на всех сайтах. Я использую беспроводную клавиатуру Logitech K270.

Danny Beckett 17.05.2024 17:22

Я использую Windows 10 на ноутбуке клиента (в других случаях я не использую Windows). Возможно, у вас установлен необычно высокий уровень повторения клавиш?

T.J. Crowder 17.05.2024 17:24

Никаких подобных настроек я не менял. По сути, это совершенно новая установка последних версий, использующая в основном ванильные настройки. Может что-то уникальное для Win 11. Сниму видео.

Danny Beckett 17.05.2024 17:25

Я вижу много людей жалуются на это (но это Интернет, это может случиться с 0,0000001%, и вы увидите много жалоб по этому поводу). В этой статье рассказывается о настройке пользователя, которая, вероятно, связана. Я сомневаюсь, что вы можете что-то разумное сделать с этим в коде вашего сайта. Вы могли бы...

T.J. Crowder 17.05.2024 17:32

... попробуйте обнаружить Edge и искусственно задержать его с помощью обработчика событий scroll, но это негативно повлияет на людей, которые изменили настройки. Я думаю, вам лучше просто предоставить людям возможность настраивать свои браузеры так, как им удобно, FWIW. Если это все веб-сайты, это действительно не ваша проблема.

T.J. Crowder 17.05.2024 17:32

Разве это не функция выбранной пользователем (или по умолчанию) частоты повторения клавиатуры в операционной системе и/или выбранной пользователем (или по умолчанию) скорости/расстояния прокрутки? Если да, то это не те вещи, которые веб-страница должна переопределять, поскольку это выбор пользователя или ОС. Учитывая, что вы говорите, что это только в Edge, то похоже, что это настройка на уровне браузера, возможно, выбор расстояния прокрутки, который, опять же, не подлежит изменению для каждого веб-сайта, поскольку это противоречит ожиданиям пользователей относительно того, как пользовательский интерфейс работает в этом браузере и/или может напрямую переопределять выбор пользователя.

Makyen 18.05.2024 20:19

Некоторые отзывы: То, как вы это сказали, по сути выглядит как вопрос о настройках браузера/ОС, который не по теме, попробуйте переформулировать свой вопрос и сосредоточить его на части JavaScript, что-то вроде: «Как сделать Я контролирую (уменьшаю) скорость прокрутки на своем сайте с помощью JavaScript"

Abdul Aziz Barkat 18.05.2024 20:19

@AbdulAzizBarkat Спасибо, я отредактировал свой вопрос, чтобы он стал понятнее!

Danny Beckett 18.05.2024 20:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
12
293
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

По словам Microsoft, они изменили Edge, чтобы он прокручивался на процент от полосы прокрутки, а не на фиксированное количество пикселей, как это делает Chrome:

Браузеры Chromium используют фиксированное значение дельты прокрутки (100 пикселей на каждое движение колесика мыши, 40 пикселей на каждое нажатие кнопки полосы прокрутки или нажатие стрелки на клавиатуре). Мы меняем это поведение, чтобы оно соответствовало предыдущим версиям Microsoft Edge, которые использовали высоту прокрутки для вычисления отклонений прокрутки. Процентная прокрутка — отличное функциональное дополнение, значительно упрощающее навигацию по небольшим скроллерам.

На длинных страницах это заставляет страницу прокручиваться невероятно быстро.

Эта проблема, по-видимому, зависит от версии ОС (см. комментарии).


Я протестировал следующее решение, и его можно использовать независимо от того, какой параметр Windows Scrolling Personality установлен в edge:///flags (включен или отключен).

if (window.navigator.userAgent.indexOf('Edg') > -1) {
    document.onkeydown = slowScroll;
    window.lastScrolledUp = 0;
    window.lastScrolledDown = 0;
    window.lastScrolledLeft = 0;
    window.lastScrolledRight = 0;
}

function slowScroll(e) {

    // Don't capture key presses when inside form fields
    if (['datalist', 'input', 'optgroup', 'option', 'select', 'textarea'].indexOf(e.target.nodeName.toLowerCase()) >= 0) {
        return;
    }

    // Limit in milliseconds - may be scrolled once per this limit
    var minDelay = 50;

    var now = Date.now();
    
    switch(e.key) {
        case 'ArrowUp':
            if (now - window.lastScrolledUp < minDelay) {
                e.preventDefault();
                return;
            }
    
            window.lastScrolledUp = now;
        break;
    
        case 'ArrowDown':
            if (now - window.lastScrolledDown < minDelay) {
                e.preventDefault();
                return;
            }
    
            window.lastScrolledDown = now;
        break;
    
        case 'ArrowLeft':
            if (now - window.lastScrolledLeft < minDelay) {
                e.preventDefault();
                return;
            }
    
            window.lastScrolledLeft = now;
        break;
    
        case 'ArrowRight':
            if (now - window.lastScrolledRight < minDelay) {
                e.preventDefault();
                return;
            }
    
            window.lastScrolledRight = now;
        break;
    }
}

Приведенный выше код успешно замедляет смехотворно высокую скорость прокрутки в Edge. Код гарантирует, что страницу нельзя прокручивать чаще, чем раз в 50 мс в любом направлении — время контролируется minDelay.

Чтобы пойти еще дальше и применить это ограничение ко всем браузерам, просто удалите первую строку кода (и ее закрывающую скобку). Это то, что мы в конечном итоге сделали, чтобы обеспечить единообразие взаимодействия с пользователем во всех браузерах.

Этот код прекрасно работает со всеми браузерами, в которых я его тестировал: Edge, Chrome и Opera (все они основаны на Chromium) + Firefox. Он просто вводит ограничение на скорость прокрутки страницы с помощью клавиш со стрелками.

Прокрутка с помощью Page Down + Page Up остается неизменной, и ее по-прежнему можно использовать (нажимать или удерживать) для быстрой прокрутки страницы.


Я был бы рад и очень признателен за любые лучшие ответы, в которых не используются такого рода уловки, если у вас есть идеи, пожалуйста!

Другие вопросы по теме