Допустим, у вас есть много элементов, выровненных по горизонтали:
<div
id="abc"
style="display: flex; flex-direction:row; overflow:scroll; height: 100px"
>
<h1>Hello Vanilla!</h1>
<h1>Hello Vanilla!</h1>
...
</div>
для автоматической прокрутки вы можете использовать какой-то l oop например:
self.setInterval(() => {
if (container.scrollLeft !== scrollWidth) {
container.scrollTo(container.scrollLeft + 1, 0);
}
Это отлично работает. Но теперь предположим, что вы хотите прокрутить 2 отдельных div ...
for (var i = 0; i < containers.length; i++) {
const container = document.getElementById(containers[i]);
const ScrollWidth = container.scrollWidth - container.clientWidth;
if (i % 2 == 0) {
console.log("starting w/ offset!");
container.scrollTo(ScrollWidth - 1, 0);
}
var scrollDirection = 1;
var scrollLeft = ScrollWidth;
self.setInterval(() => {
if (scrollDirection == 1 && container.scrollLeft !== ScrollWidth) {
container.scrollTo(container.scrollLeft + 1, 0);
} else if (scrollDirection == -1 && container.scrollLeft !== 0) {
container.scrollTo(container.scrollLeft - 1, 0);
} else {
scrollDirection = scrollDirection * -1;
}
}, 15);
}
});
Ожидаемый результат - один div должен прокручиваться влево, а другой - вправо. Однако это не работает, несмотря на то, что контейнеры разные. Здесь есть ответ , который предлагает прокрутить до элемента, что я делаю:
container.scrollTo(container.scrollLeft + 1, 0);
Я воспроизвел это в песочнице. Чтобы быстро проверить, раскомментируйте одну из этих 3 строк
// var containers = ["cba"];
// var containers = ["abc"];
// var containers = ["abc","cba"];
Строки 1 и 2 работают, однако 3 не работает. Похоже, scrollTo не может работать с двумя отдельными div одновременно. Это правда? Если да, то какие у меня варианты прокрутки обоих по отдельности?