UNPKG

zliq

Version:

slim and quick framework in low loc

68 lines (60 loc) 1.82 kB
import { zx, Component, stream } from "../src"; import "./header.scss"; export const Header = () => { let scroll$ = stream(); window.addEventListener("scroll", scroll$); let headerHidden$ = stream(false); let header = zx` <div class=${headerHidden$.map( hidden => "row big-header highlight-background " + (hidden ? "hidden" : "") )} onclick=${e => e.target.tagName !== "A" && scrollUp()} > <div class="container"> <div class="row"> <div class="col s12 center"> <img src="./icon.png" /> </div> <h1 class="col s12 center highlight">ZLIQ</h1> </div> <h3 class="center highlight-less"> The web-framework-force you want your Padawan to learn. </h3> </div> <div class="link-list center"> <a href="#motivation">Motivation</a> <a href="#tutorial">Tutorial</a> <a href="#streams">Streams</a> <a href="#state">State</a> <a href="#helpers">Helpers</a> <a href="#routing">Routing</a> <a href="#lifecycle">Lifecycle</a> <a href="#testing">Testing</a> </div> </div> `; scroll$ .map(() => { if (!headerHidden$.value && document.body.scrollHeight < 900) return false; let scrollTop = window.scrollY; return scrollTop > 100; }) .map(headerHidden$); return header; }; function scrollUp() { scrollTo(document.body, 0, 0.5); } function scrollTo(element, to, duration) { if (duration <= 0) return; var difference = to - element.scrollTop; var perTick = (difference / duration) * 10; setTimeout(function() { element.scrollTop = element.scrollTop + perTick; if (element.scrollTop === to) return; scrollTo(element, to, duration - 10); }, 10); }