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