Как сделать плавную смену картинок при скроллинге?
Есть блоки с картинками.
Как сделать так, чтобы экран оставался на месте, а картинки плавно сменялись при скролле вниз и возвращались в обратной последовательности при скролле вверх? Важное уточнение: картинки нужно спозиционировать относительно родительского врапера, а не глобального window, чтобы не отображалась сама полоса скролла, т.е. здесь свойство window.pageYOffset мне не подойдет. У меня не получается это сделать, т.к. не понимаю к какому свойству зацепиться или каким другим путем пойти. Код:
var section1 = document.getElementById('section1').offsetTop;
var section2 = document.getElementById('section2').offsetTop;
var section3 = document.getElementById('section3').offsetTop;
var section4 = document.getElementById('section4').offsetTop;
var scrollOffset = 300;
window.addEventListener("scroll", function() {
var scroll = window.pageYOffset + scrollOffset;
console.log(scroll);
if (scroll < 500) {
document.querySelector('.grid-image img').setAttribute('src', 'https://webdevtrick.com/wp-content/uploads/b47sample3.jpg');
}
if (scroll > section2) {
document.querySelector('.grid-image img').setAttribute('src', 'https://webdevtrick.com/wp-content/uploads/image-slider4.jpg');
}
if (scroll > section3) {
document.querySelector('.grid-image img').setAttribute('src', 'https://webdevtrick.com/wp-content/uploads/image-slider3.jpg');
}
if (scroll > section4) {
document.querySelector('.grid-image img').setAttribute('src', 'https://webdevtrick.com/wp-content/uploads/image-slider1.jpg');
}
});
<section id="section1">
<div class="img-block">
<div class="grid-image image-1 active"><img src="https://webdevtrick.com/wp-content/uploads/b47sample3.jpg" /></div>
</div>
</section>
<section id="section2">
<div class="img-block">
<div class="grid-image image-2 active"><img src="https://webdevtrick.com/wp-content/uploads/image-slider4.jpg" /></div>
</div>
</section>
<section id="section3">
<div class="img-block">
<div class="grid-image image-3 active"><img src="https://webdevtrick.com/wp-content/uploads/image-slider3.jpg" /></div>
</div>
</section>
<section id="section4">
<div class="img-block">
<div class="grid-image image-4 active"><img src="https://webdevtrick.com/wp-content/uploads/image-slider1.jpg" /></div>
</div>
</section>
img {
width: 400px;
display: block;
box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.3);
}
@media (min-width: 700px) {
img {
width: 500px;
}
}
@media (min-width: 1000px) {
img {
width: 700px;
}
}
Буду очень признателен за помощь! |
Цитата:
|
Цитата:
Уже решил, спасибо |
смена картинок при скроллинге
giwuf,
как вариант ...
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
div {
position: fixed;
top: 0;
width: 100%;
height: 100vh;
background-color: tomato;
overflow: hidden;
}
ul {
position: relative;
}
li {
position: absolute;
width: 40%;
}
img {
display: block;
height: 100vh;
width: 100%;
object-fit: cover;
transition: 0.3s;
opacity: var(--o, 0);
}
section {
width: 100%;
height: 500vh;
}
</style>
<script>
onscroll = e => {
const imgs = document.querySelectorAll('img');
const n = Math.floor(pageYOffset / innerHeight);
imgs.forEach((img, i) => img.style.setProperty('--o', +(n == i)))
}
</script>
</head>
<body>
<div>
<ul>
<li>
<img id="img0" style="--o: 1" src="https://picsum.photos/500?random=1">
</li>
<li>
<img id="img1" style="--o: 0" src="https://picsum.photos/500?random=2">
</li>
<li>
<img id="img2" style="--o: 0" src="https://picsum.photos/500?random=3">
</li>
<li>
<img id="img3" style="--o: 0" src="https://picsum.photos/500?random=4">
</li>
<li>
<img id="img4" style="--o: 0" src="https://picsum.photos/500?random=5">
</li>
</ul>
</div>
<section></section>
</body>
</html>
|
giwuf,
или так ...
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
div {
position: fixed;
top: 0;
width: 100%;
height: 100vh;
background-color: tomato;
overflow: hidden;
}
ul {
position: relative;
}
li {
position: absolute;
width: 40%;
}
img {
display: block;
height: 100vh;
width: 100%;
object-fit: cover;
opacity: var(--o, 0);
}
section {
width: 100%;
height: 500vh;
}
</style>
<script>
onscroll = e => {
const imgs = document.querySelectorAll('img');
const n = Math.floor(pageYOffset / innerHeight);
const m = (pageYOffset % innerHeight)/innerHeight - .7;
imgs.forEach((img, i) => {
i = (n == i) ? 1 - m : (n + 1 == i) ? m : 0;
i = Math.max(0, Math.min(1, i));
img.style.setProperty('--o', i)
})
}
</script>
</head>
<body>
<div>
<ul>
<li>
<img id="img0" style="--o: 1" src="https://picsum.photos/500?random=1">
</li>
<li>
<img id="img1" style="--o: 0" src="https://picsum.photos/500?random=2">
</li>
<li>
<img id="img2" style="--o: 0" src="https://picsum.photos/500?random=3">
</li>
<li>
<img id="img3" style="--o: 0" src="https://picsum.photos/500?random=4">
</li>
<li>
<img id="img4" style="--o: 0" src="https://picsum.photos/500?random=5">
</li>
</ul>
</div>
<section></section>
</body>
</html>
|
| Часовой пояс GMT +3, время: 10:01. |