Анимация прокрутки для функции горизонтальной прокрутки

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

document.addEventListener("DOMContentLoaded", function(e) {
  console.info("DOM loaded");
  var buttons = document.getElementsByClassName("right-arrow");

  for(var i = 0; i < buttons.length; i++){
    buttons[i].onclick = function(e){
      console.info(`Function fired on ${this.id}`);
      var the_scroller = this.closest(".scroller-gutter");

      the_scroller.getElementsByClassName('scroller')[0].scrollLeft += 120;
    }
  }

}, false);

Все, что я действительно хотел бы сделать, это добавить {behavior: "smooth"} где-нибудь, чтобы сделать анимацию onClick менее прерывистой и имитировать естественное поведение прокрутки, но я новичок в JS и понятия не имею, что делать.

Кроме того, когда я переставляю кнопки в блоке .scroller-gutter, функциональность иногда нарушается. Есть идеи, почему это может быть?

Я могу придумать несколько различных способов достижения этого, если вы открыты для рефакторинга: Анимировать, CSS переход или сделайте setInterval и постепенно увеличивайте свой scrollLeft с помощью тиков. Вы полны решимости сохранить следующую строку ?: the_scroller.getElementsByClassName('scroller')[0].scrollLef‌​t += 120;

Magnum 31.10.2018 20:11

Уже ответили здесь: stackoverflow.com/questions/24635884/…

thatguy 31.10.2018 20:17
Поведение ключевого слова "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) для оценки ваших знаний,...
4
2
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете использовать функцию scrollTo() с behavior: 'smooth' в параметрах для плавной прокрутки к заданной точке. В вашем случае это будет выглядеть так:

the_scroller.getElementsByClassName('scroller')[0]
  .scrollTo({ left: the_scroller.getElementsByClassName('scroller')[0].scrollLeft + 120, behavior: 'smooth' });

https://codepen.io/anon/pen/VEoYyx

Вы также можете рассмотреть возможность использования scrollBy() или scrollIntoView(), как предлагается здесь

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