#javascript #scroll #horizontal-scrolling
#javascript #прокрутите #горизонтальная прокрутка
Вопрос:
Я создал сайт с горизонтальной прокруткой. Одна из проблем, с которой я сталкиваюсь, заключается в том, что страница работает только при прокрутке вниз, а пользователи постоянно пытаются прокручивать вправо. Было интересно, есть ли пользовательский код для «привязки» поведения прокрутки вправо для прокрутки вниз.?
Спасибо
Комментарии:
1. Кажется, что любой механизм, который вызывает прокрутку вниз, чтобы привести к горизонтальной прокрутке, должен находиться в вашей кодовой базе, поэтому это нельзя изменить?
2. Можете ли вы показать свой код, чтобы мы могли получить представление о макете вашей страницы? Это помогло бы при разработке решения.
Ответ №1:
Вот пример того, что предлагал Кайл Зельц:
var lastScrollTop = window.pageYOffset;
window.onscroll = function(e) {
var st = window.pageYOffset || document.documentElement.scrollTop;
if (st > lastScrollTop){
document.body.scrollLeft = st;
console.log("right");
} else if (st < lastScrollTop) {
document.body.scrollLeft = st;
console.log("left");
}
lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling
}
Сложно заставить вашу страницу прокручиваться влево и вправо именно так, как вы хотите, поэтому вам придется поэкспериментировать со document.body.scrollLeft = st;
строками.
Вы также можете использовать .scrollBy({ left: 100, behavior: 'smooth' });
, который менее нервный, чем приведенный выше, но есть небольшая задержка из-за свойства ‘smooth’. например
var lastScrollTop = window.pageYOffset;
window.onscroll = function(e) {
var st = window.pageYOffset || document.documentElement.scrollTop;
if (st > lastScrollTop){
document.body.scrollBy({ left: 100, behavior: 'smooth' });
console.log("right");
} else if (st < lastScrollTop) {
document.body.scrollBy({ left: -100, behavior: 'smooth' });
console.log("left");
}
lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling
}
Вот как прокрутить вправо, чтобы вызвать событие прокрутки вниз:
var lastScrollX = window.pageXOffset;
window.onscroll = function(e) {
var st = window.pageXOffset || document.documentElement.scrollLeft;
if (st > lastScrollX){
document.body.scrollBy({ top: 100, left: 0, behavior: 'smooth' });
console.log("right");
} else if (st < lastScrollX) {
document.body.scrollBy({ top: -100, left: 0, behavior: 'smooth' });
console.log("left");
}
lastScrollX = st <= 0 ? 0 : st; // For Mobile or negative scrolling
}
Комментарии:
1. Привет! Я смог заставить консоль регистрировать влево и вправо, так что, похоже, это работает. Я думаю, что, возможно, я ошибся в объяснении — вместо прокрутки вниз для прокрутки вправо я пытаюсь выполнить обратное (где прокрутка вправо = прокрутка вниз).
2. Вы могли бы настроить этот код, чтобы вместо этого отслеживать
pageXOffset
и корректироватьtop
значение в scrollBy вместоleft
. Однако, если вы не можете в настоящее время прокручивать вправо на своем сайте, вы столкнетесь с проблемой события прокрутки, не запускающего вашу функцию3. @ParkLewisSam Я обновил свой ответ внизу, чтобы включить обратное
4. Удивительно! Большое спасибо!
Ответ №2:
Вы можете изучить возможность присоединения метода window.scrollBy к функции, вызываемой событием onscroll.
В качестве альтернативы, если вы используете jQuery, есть плагин колеса мыши, который будет выполнять горизонтальную прокрутку. Инструкции по его настройке четко определены здесь.
Комментарии:
1. Можете ли вы объяснить первый вариант? Я попробовал плагин jquery, но он не работает должным образом