Как зафиксировать блок при вертикальном скролле?
Подскажите как можно сделать что-бы при вертикальном скролле желтый и красный блоки заезжали за белый(белый фиксирован как-бы). Спасибо
https://jsfiddle.net/w96abygp/7/
function scrollCompare() {
let speed = 2; // Скорость скролла.
let scroll = document.querySelector('.compare__body');
let scrollMainBlock = document.querySelector('.compare__main-column');
let left = 0;
let drag = false;
let coorX = 0;
scroll.addEventListener('mousedown', function(e) {
drag = true;
coorX = e.pageX;
});
document.addEventListener('mouseup', function() {
drag = false;
left = scroll.scrollLeft;
top = scroll.scrollTop;
});
scroll.addEventListener('mousemove', function(e) {
if (drag) {
this.scrollLeft = left - (e.pageX - coorX) * speed;
}
});
scroll.addEventListener('scroll', function(e) {
if (window.innerWidth > 768)
scrollMainBlock.style.transform = 'translateX(' + this.scrollLeft + 'px)';
else scrollMainBlock.style.transform = '';
});
window.addEventListener('resize',
e => scroll.dispatchEvent(new CustomEvent('scroll'))
);
};
scrollCompare();
.compare__body {
display: flex;
flex-wrap: nowrap;
overflow: auto;
height: 940px;
}
.compare__head-row {
border: 1px solid #000000;
height: 480px;
width: 290px;
margin: 0px 0px 40px 0px;
}
.compare__main-head-row {
height: 480px;
width: 290px;
background: #ffffff;
padding: 0px 0px 42px 0px;
}
.compare__main-row {
width: 310px;
min-height: 80px;
background: red;
}
.compare__product-row {
width: 330px;
min-height: 80px;
background: yellow;
}
.compare__body {
-ms-overflow-style: none;
/* Internet Explorer 10+ */
scrollbar-width: none;
/* Firefox */
}
.compare__body::-webkit-scrollbar {
display: none;
/* Safari and Chrome */
}
<div class="compare__wrap">
<div class="compare__block">
<div class="compare__scroll">
<div class="compare__content">
<div class="compare__body">
<div class="compare__main-column">
<div class="compare__main-head-row"></div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
</div>
</div>
</div>
</div>
Ответы (1 шт):
Автор решения: EzioMercer
→ Ссылка
Надеюсь вас правильно понял:
function scrollCompare() {
let speed = 2; // Скорость скролла.
let scroll = document.querySelector('.compare__body');
let scrollMainBlock = document.querySelector('.compare__main-column');
let left = 0;
let drag = false;
let coorX = 0;
scroll.addEventListener('mousedown', function(e) {
drag = true;
coorX = e.pageX;
});
document.addEventListener('mouseup', function() {
drag = false;
left = scroll.scrollLeft;
top = scroll.scrollTop;
});
scroll.addEventListener('mousemove', function(e) {
if (drag) {
this.scrollLeft = left - (e.pageX - coorX) * speed;
}
});
scroll.addEventListener('scroll', function(e) {
if (window.innerWidth > 768)
scrollMainBlock.style.transform = 'translateX(' + this.scrollLeft + 'px)';
else scrollMainBlock.style.transform = '';
});
window.addEventListener('resize',
e => scroll.dispatchEvent(new CustomEvent('scroll'))
);
};
scrollCompare();
:root {
--height-of-empty-blocks: 480px;
}
.compare__body {
display: flex;
flex-wrap: nowrap;
overflow: auto;
height: 940px;
ms-overflow-style: none;
scrollbar-width: none;
}
.compare__body::-webkit-scrollbar {
display: none;
}
.compare__head-row {
border: 1px solid #000000;
height: var(--height-of-empty-blocks);
width: 290px;
position: fixed;
}
.compare__main-head-row {
height: 480px;
width: 290px;
background: #ffffff;
padding: 0px 0px 42px 0px;
}
.compare__main-row {
width: 310px;
min-height: 80px;
background: red;
}
.rows-wrapper {
margin-top: var(--height-of-empty-blocks);
}
.compare__product-row {
width: 330px;
min-height: 80px;
background: yellow;
}
<div class="compare__wrap">
<div class="compare__block">
<div class="compare__scroll">
<div class="compare__content">
<div class="compare__body">
<div class="compare__main-column">
<div class="rows-wrapper">
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
<div class="compare__main-row">Цена</div>
</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="rows-wrapper">
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="rows-wrapper">
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="rows-wrapper">
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="rows-wrapper">
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
</div>
<div class="compare__product">
<div class="compare__head-row"></div>
<div class="rows-wrapper">
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
<div class="compare__product-row">1002</div>
</div>
</div>
</div>
</div>
</div>
</div>