На самом деле я работаю над кодом с несколькими полосами прокрутки, и все они связаны, поэтому, если вы переместите одну из них, остальные 2 будут двигаться пропорционально, я сказал пропорционально, потому что они не имеют одинаковую ширину. Это довольно интересно, но работает не очень хорошо, потому что иногда (всегда пока) скроллер не достигает конца полосы прокрутки ...
Поэтому мой вопрос: как я могу изменить свой код так, чтобы достичь конца полосы прокрутки с помощью скроллера? PS: вам нужно навести зеленый div, чтобы отобразить третью полосу прокрутки. Подсказки: я думаю, что источник проблемы напрямую связан с функциями, которые связывают полосы прокрутки между ними, но я не могу понять, что с ними не так ...
Вот код:
let w_mob_len = getComputedStyle(document.getElementById('w_mob_child'), null).width.replace("px", "") - getComputedStyle(document.getElementById('w_mob'), null).width.replace("px", "");
let w_top_len = getComputedStyle(document.getElementById('w_top_child'), null).width.replace("px", "") - getComputedStyle(document.getElementById('w_top'), null).width.replace("px", "");
let w_tab_len = getComputedStyle(document.getElementById('w_tab_child'), null).width.replace("px", "") - getComputedStyle(document.getElementById('w_tab'), null).width.replace("px", "");
function move_scrollbar_mobile() {
let wrap_mob = document.getElementById("w_mob");
let wrap_top = document.getElementById("w_top");
let wrap_tab = document.getElementById("w_tab");
wrap_top.scrollLeft = wrap_mob.scrollLeft * w_top_len / w_mob_len;
wrap_tab.scrollLeft = wrap_mob.scrollLeft * w_tab_len / w_mob_len;
}
function move_scrollbar_top() {
let wrap_mob = document.getElementById("w_mob");
let wrap_top = document.getElementById("w_top");
let wrap_tab = document.getElementById("w_tab");
wrap_mob.scrollLeft = wrap_top.scrollLeft * w_mob_len / w_top_len;
wrap_tab.scrollLeft = wrap_top.scrollLeft * w_tab_len / w_top_len;
}
function move_scrollbar_table() {
let wrap_mob = document.getElementById("w_mob");
let wrap_top = document.getElementById("w_top");
let wrap_tab = document.getElementById("w_tab");
wrap_mob.scrollLeft = wrap_tab.scrollLeft * w_mob_len / w_tab_len;
wrap_top.scrollLeft = wrap_tab.scrollLeft * w_top_len / w_tab_len;
}
function disp_scroll_mob() {
document.getElementById("w_mob").style.display = "inline-block";
}
function hide_scroll_mob() {
let w_flo = document.getElementById("w_flo");
w_flo.addEventListener("mouseleave", function() {
document.getElementById("w_mob").style.display = "none";
});
}
function disp_scroll_mob_alt() {
let w_mob = document.getElementById("w_mob");
w_mob.addEventListener("mouseenter", function() {
document.getElementById("w_mob").style.display = "inline-block";
})
}
.wrapper_top,
.wrapper_table {
width: 300px;
overflow-x: scroll;
overflow-y: hidden;
}
.wrapper_mobile {
position: fixed;
width: 100px;
height: 50px;
top: 10%;
overflow-x: scroll;
overflow-y: hidden;
display: none;
padding: 10px;
background-color: red;
z-index: 2;
padding-bottom: 10px;
}
.wrapper_float {
width: 100%;
height: 60%;
top: 20%;
position: relative;
background-color: #88FF88;
z-index: 1;
}
.wrapper_top {
height: 20px;
}
.wrapper_table {
height: 200px;
}
.child_top {
width: 1000px;
height: 20px;
}
.child_mobile {
width: 300px;
height: 20px;
}
.search_table {
table-layout: fixed;
}
th {
font-size: 15px;
background: #66C2E0;
}
th {
min-width: 200px;
}
<div class="wrapper_mobile" id="w_mob" onscroll="move_scrollbar_mobile()" onmouseover="">
<div class="child_mobile" id="w_mob_child">
</div>
</div>
<div class="wrapper_top" id="w_top" onscroll="move_scrollbar_top()">
<div class="child_top" id="w_top_child">
</div>
</div>
<div class="wrapper_table" id="w_tab" onscroll="move_scrollbar_table()" onmouseout="hide_scroll_mob()">
<div class="wrapper_float" id="w_flo" onmouseover="disp_scroll_mob()" onmouseout="disp_scroll_mob_alt()">
</div>
<table class="search_table" id="w_tab_child">
<tbody>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
<th>Col4</th>
<th>Col5</th>
<th>Col6</th>
<th>Col7</th>
</tr>
</tbody>
</table>
</div>