Подтягивание блоков при прокрутке
Приветствую! нужна помощь.
|
Видимо тут мастера не часто появляются или же моя задача слишком сложная)))))))).
|
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, время: 17:30. |