В настоящее время я пытаюсь изменить код, предоставленный мне другом, который увеличит или уменьшит расстояние прокрутки внутри 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, функциональность иногда нарушается. Есть идеи, почему это может быть?
Уже ответили здесь: stackoverflow.com/questions/24635884/…



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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