У меня есть собственное решение для полосы прокрутки ( просмотр на CodePen ).
Очевидной идеей является перетаскивание пользовательской полосы прокрутки для прокрутки страницы.
Попробуйте и посмотрите, что получится ... это странно дергается, а полоса прокрутки и прокрутка страницы внезапно щелкают между точками.
Процесс прокрутки в данный момент выполняется обработчиком mousemove
:
- обновить положение полосы прокрутки визуально
window.scrollTo(...)
новая позиция, рассчитанная как область просмотра top
относительно новой позиции полосы прокрутки
Если я закомментирую строку window.scrollTo(...)
, тогда сама полоса прокрутки будет двигаться совершенно плавно и придерживаться курсора.
Соответствующий код
mousemove(e) {
if (!this.active) return;
this.update(this.getScrollDeltaPositional(e.pageY));
window.scrollTo({top: this.getWindowScrollTop()});
}
update(position, show=true, timer=true, time=0) {
let track = this.getTrackHeight();
this.trackPosition = Math.min(Math.max(position, 0), track);
this.track.style.transform = `translateY(${this.trackPosition}px)`;
}
getWindowScrollTop() {
let scroll = this.getDocumentScroll();
let position = (this.trackPosition / this.root.clientHeight);
return Math.round(scroll * position);
}
(Рекомендуется просмотреть полный исходный код на CodePen)
Я предполагаю, что прокрутка каждого mousemove
блокирует события mousemove
, в результате чего наблюдаются внезапные щелчки.
Как добиться эффекта плавной прокрутки на window
с помощью пользовательской полосы прокрутки?