Как-то так?
function syncScroll(elements) {
function getScrollPositions() {
return elements.map((el) => ({
scrollLeft: el.scrollLeft,
scrollTop: el.scrollTop,
}));
}
let scrollPositions = getScrollPositions();
elements.forEach((el) =>
el.addEventListener("scroll", () => {
let currentPositions = getScrollPositions();
for (let [i, position] of currentPositions.entries()) {
for (let dim of ["scrollLeft", "scrollTop"]) {
if (position[dim] != scrollPositions[i][dim]) {
for (let element of elements) {
element[dim] = position[dim];
}
}
}
}
scrollPositions = currentPositions;
})
);
}
syncScroll([T1Obj, T2Obj, T3Obj]);
https://jsfiddle.net/xowvp3a9/
Также имейте в виду, что элементы прокрутки не являются #T1
, #T2
, #T3
, но внутри них. Вы можете увидеть это с помощью тега прокрутки.
По этой причине:
const T1Obj = document.querySelector('#T1 .wtHolder');
const T2Obj = document.querySelector('#T2 .wtHolder');
const T3Obj = document.querySelector('#T3 .wtHolder');