Подтягивание блоков при прокрутке
Приветствую! нужна помощь.
|
Видимо тут мастера не часто появляются или же моя задача слишком сложная)))))))).
|
Bandito,
мысли вслух ...
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
body{
display: flex;
flex-wrap: wrap;
position: relative;
}
body > div{
position: relative;
width: 16.45%;
box-sizing: border-box;
height: 1200px;
transition: all 3.8 ease-in-out;
display: flex;
flex-direction: column;
}
body > div > div{
flex : 1;
}
body > div > div:nth-child(2n+1){ box-sizing: border-box;
background-color: #FFFFFF;
border: 1px solid #000000;
}
body > div > div:nth-child(2n){ box-sizing: border-box;
background-color: #000000;
border: 1px solid #FFFFFF;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
var scroll = 0 ;
$(window).scroll(function() {
var s = $(window).scrollTop(), n = s > scroll;
scroll=s;
$("body div:nth-child(1),body div:nth-child(6)").stop(true,true).css({"top" : (n? "80" :"-80")+"px"})
.delay(600).animate({"top": 0},800)
$("body div:nth-child(2),body div:nth-child(5)").stop(true,true).css({"top" : (n? "50" :"-50")+"px"})
.delay(300).animate({"top": 0},800)
})
});
</script>
</head>
<body>
<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</body>
</html>
|
Цитата:
обратите внимание в прототипе при разной скорости прокрутки margin-top меняется в зависимости от скорости прокрутки. |
и еще при прокрутке вверх блоки сползают вниз а при прокрутки вниз блоки сползают вверх
|
Цитата:
|
вот описание как то так
|
Bandito,
других вариантов пока нет. |
Цитата:
вроде сам мастер но застрял на этом мелком задаче уже весь мозг вынес)))) спасибо тебя что помогаешь |
Цитата:
|
Bandito,
специалиста надо по css, сделал как мог :) |
Цитата:
я со вчерашнего дня сделал вариантов 10 вроде все работают но в каждом варианте чего то не хватает. вот и подумал обратиться за помощью к коллегам.))) я и в css не плохо разбираюсь но не как не смог воссоздать эффект. Подождём других идей может все вместе справимся)))) |
Других желающих нет помочь?))))))))))
|
Bandito,
Цитата:
|
Цитата:
|
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<style>
.blocks {
max-width: 60em;
width: 100%;
height: 200em;
display: flex;
margin: 20em auto;
}
.block {
background: linear-gradient(#f1f1f1 50%, #212121 0);
background-size: 100% 20em;
flex: auto;
margin: .1em;
will-change: transform;
}
</style>
<div class="blocks">
<div class="block" data-delay="6000"></div>
<div class="block" data-delay="2000"></div>
<div class="block" data-delay="4000"></div>
<div class="block" data-delay="9000"></div>
</div>
<script>
{
let y0 = 0;
let t0 = performance.now();
let speed = 0;
let blocks = document.querySelectorAll(".block");
let delay = Symbol.for("delay");
for(let block of blocks)
block[delay] = +block.dataset.delay || 1000;
let render = () => {
let y = document.body.scrollTop;
let t = performance.now();
let dy = y - y0;
let dt = t - t0;
if(dt < 16) return;
y0 = y;
t0 = t;
speed = .9 * speed - 0.000405 * dy / dt;
for(let block of blocks) {
block.style.transform = `translateY(${(-speed * block[delay]).toFixed(4)}px)`;
}
};
let main = () => {
render();
requestAnimationFrame(main);
};
main();
}
</script>
</body>
</html>
|
Цитата:
Цитата:
под утро голова заработало сам разобрался. вопрос решен. хотя оба ваши варианты тоже рабочие сразу чувствуется профессионализм. Удачи вам парни.И спасибо еще раз |
| Часовой пояс GMT +3, время: 22:24. |