Sha256: 13a67d5a4ae7a402800fc31d3e90f07f0da60b97db804d418bfb3ed2f2127a50
Contents?: true
Size: 1.83 KB
Versions: 2
Compression:
Stored size: 1.83 KB
Contents
/* * Top bar title auto change while scrolling up/down in mobile screens. */ $(function() { const titleSelector = "div.post>h1:first-of-type"; const $pageTitle = $(titleSelector); const $topbarTitle = $("#topbar-title"); if ($pageTitle.length === 0 /* on Home page */ || $pageTitle.hasClass("dynamic-title") || $topbarTitle.is(":hidden")) {/* not in mobile views */ return; } const defaultTitleText = $topbarTitle.text().trim(); let pageTitleText = $pageTitle.text().trim(); let hasScrolled = false; let lastScrollTop = 0; if ($("#page-category").length || $("#page-tag").length) { /* The title in Category or Tag page will be "<title> <count_of_posts>" */ if (/\s/.test(pageTitleText)) { pageTitleText = pageTitleText.replace(/[0-9]/g, "").trim(); } } // When the page is scrolled down and then refreshed, the topbar title needs to be initialized if ($pageTitle.offset().top < $(window).scrollTop()) { $topbarTitle.text(pageTitleText); } let options = { rootMargin: '-48px 0px 0px 0px', // 48px equals to the topbar height (3rem) threshold: [0, 1] }; let observer = new IntersectionObserver((entries) => { if (!hasScrolled) { hasScrolled = true; return; } let curScrollTop = $(window).scrollTop(); let isScrollDown = lastScrollTop < curScrollTop; lastScrollTop = curScrollTop; let heading = entries[0]; if (isScrollDown) { if (heading.intersectionRatio === 0) { $topbarTitle.text(pageTitleText); } } else { if (heading.intersectionRatio === 1) { $topbarTitle.text(defaultTitleText); } } }, options); observer.observe(document.querySelector(titleSelector)); /* Click title will scroll to top */ $topbarTitle.click(function() { $("body,html").animate({scrollTop: 0}, 800); }); });
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
redeyed-jekyll-theme-0.1.2 | _javascript/common/topbar-title.js |
redeyed-jekyll-theme-0.1.1 | _javascript/common/topbar-title.js |