Scroll Reveal Panel
Motion and entrances @bhaskar Stars:0 Views:1
<div class="sr"><div class="pn"><div class="pg"><i></i></div><div class="sc"></div><button class="up" type="button">↑</button></div></div>
<style>
.sr{width:100%;height:100%;min-height:380px;display:grid;place-items:center;font-family:system-ui,-apple-system,sans-serif;color:#eee;}.pn{position:relative;width:340px;height:260px;border-radius:18px;background:#1b1b1b;border:1px solid #2a2a2a;overflow:hidden}.pg{position:absolute;top:0;left:0;right:0;height:2px;z-index:2}.pg i{display:block;height:100%;width:100%;background:#0a84ff;transform:scaleX(0);transform-origin:0 50%}.sc{height:100%;overflow-y:auto;padding:20px;box-sizing:border-box;scrollbar-width:none}.sc::-webkit-scrollbar{display:none}.sec{padding:34px 0;border-bottom:1px solid #222;color:#999;font-size:13px;opacity:0;transform:translateY(18px);transition:opacity .5s,transform .6s cubic-bezier(.3,1.2,.5,1)}.sec.in{opacity:1;transform:none}.sec b{display:block;color:#fff;font-size:15px;margin-bottom:4px}.up{position:absolute;right:12px;bottom:12px;width:30px;height:30px;border-radius:50%;border:0;background:#2a2a2a;color:#fff;cursor:pointer;opacity:0;transform:scale(.6);pointer-events:none;transition:opacity .25s,transform .35s cubic-bezier(.3,1.6,.5,1)}.up.on{opacity:1;transform:none;pointer-events:auto}
</style>
<script>
(function(){var R=document.querySelector(".pn"),sc=R.querySelector(".sc"),up=R.querySelector(".up"),pg=R.querySelector(".pg i");for(var i=1;i<=6;i++){var s=document.createElement("div");s.className="sec";s.innerHTML="<b>Section "+i+"</b>Content reveals as it scrolls into view.";sc.appendChild(s)}function upd(){var r=sc.getBoundingClientRect();[].forEach.call(sc.children,function(s){var q=s.getBoundingClientRect();if(q.top<r.bottom-30&&q.bottom>r.top)s.classList.add("in")});var m=sc.scrollHeight-sc.clientHeight;pg.style.transform="scaleX("+(m>0?sc.scrollTop/m:0)+")";up.classList.toggle("on",sc.scrollTop>60)}sc.onscroll=upd;up.onclick=function(){sc.scrollTo({top:0,behavior:"smooth"})};upd();setTimeout(upd,100);setTimeout(upd,500)})();
</script>