Лучший способ управлять дорогостоящей прокруткой в ​​JavaScript?

У нас есть виджет пользовательского интерфейса в нашем основном пользовательском интерфейсе, который использует JavaScript для ответа на события прокрутки из браузера. Ответ на каждое событие прокрутки относительно дорого. Пользователь может легко «поставить в очередь» большой набор событий прокрутки, пока первые несколько обрабатываются и отображаются в виджете.

Проблема заключается в том, что затем виджет попадает в «чистилище обработки прокрутки», где обрабатывается и отображается каждое промежуточное событие прокрутки.

Например: пользователь пролистал от a-b, затем b-c, затем d-e, затем e-f и так далее. Обработка события прокрутки может все еще работать над визуализацией прокрутки b-c к тому времени, когда пользователь инициировал событие y-z.

Вместо этого мы хотели бы более разумно управлять этими событиями. Было бы замечательно, если бы мы могли визуализировать результаты события прокрутки, затем «догнать», где бы ни находился пользователь, и пропустить любые промежуточные прокрутки, которые теперь устарели.

Как лучше всего это сделать?

Поведение ключевого слова "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) для оценки ваших знаний,...
3
0
779
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

Что-то вроде этого:

// need to have this variable outside the scope of the handler defined below
var timeoutId = null;

// think of "connect" as pseudocode for whatever you use to connect handlers
connect(widget, "onscroll", function() {
    // ...scrolling...
    if (timeoutId != null) clearTimeout(timeoutId);
    timeoutId = setTimeout(function() {
        // *probably* done scrolling, it has been  
        // 1 second since the last scroll...  
        // run your code to render current position here  
    }, 1000);
});

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