2022-10-25 14:26:44 +03:00
|
|
|
/**
|
2022-01-06 12:42:08 +03:00
|
|
|
* Top bar title auto change while scrolling up/down in mobile screens.
|
2022-10-25 14:26:44 +03:00
|
|
|
*/
|
2020-05-29 19:48:10 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
$(function () {
|
|
|
|
const titleSelector = "div.post>h1:first-of-type";
|
|
|
|
const $pageTitle = $(titleSelector);
|
|
|
|
const $topbarTitle = $("#topbar-title");
|
2022-01-06 12:42:08 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
if ($pageTitle.length === 0 /* on Home page */
|
|
|
|
|| $pageTitle.hasClass("dynamic-title")
|
|
|
|
|| $topbarTitle.is(":hidden")) {/* not in mobile views */
|
|
|
|
return;
|
|
|
|
}
|
2019-09-30 15:38:41 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
const defaultTitleText = $topbarTitle.text().trim();
|
|
|
|
let pageTitleText = $pageTitle.text().trim();
|
|
|
|
let hasScrolled = false;
|
|
|
|
let lastScrollTop = 0;
|
2019-09-30 15:38:41 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
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();
|
|
|
|
}
|
2019-09-30 15:38:41 +03:00
|
|
|
}
|
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
// 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);
|
|
|
|
}
|
2022-01-09 14:09:29 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
let options = {
|
|
|
|
rootMargin: '-48px 0px 0px 0px', // 48px equals to the topbar height (3rem)
|
|
|
|
threshold: [0, 1]
|
|
|
|
};
|
2022-01-06 12:42:08 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
let observer = new IntersectionObserver((entries) => {
|
|
|
|
if (!hasScrolled) {
|
|
|
|
hasScrolled = true;
|
|
|
|
return;
|
|
|
|
}
|
2019-09-30 15:38:41 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
let curScrollTop = $(window).scrollTop();
|
|
|
|
let isScrollDown = lastScrollTop < curScrollTop;
|
|
|
|
lastScrollTop = curScrollTop;
|
|
|
|
let heading = entries[0];
|
2022-01-06 12:42:08 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
if (isScrollDown) {
|
|
|
|
if (heading.intersectionRatio === 0) {
|
|
|
|
$topbarTitle.text(pageTitleText);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (heading.intersectionRatio === 1) {
|
|
|
|
$topbarTitle.text(defaultTitleText);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, options);
|
2022-01-06 12:42:08 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
observer.observe(document.querySelector(titleSelector));
|
2019-09-30 15:38:41 +03:00
|
|
|
|
2022-10-25 14:26:44 +03:00
|
|
|
/* Click title will scroll to top */
|
2023-02-14 23:53:40 +03:00
|
|
|
$topbarTitle.on('click', function () {
|
2022-10-25 14:26:44 +03:00
|
|
|
$("body,html").animate({scrollTop: 0}, 800);
|
|
|
|
});
|
2019-09-30 15:38:41 +03:00
|
|
|
|
2021-01-23 10:07:18 +03:00
|
|
|
});
|