Custom CSS
@media screen and (max-width: 767px) {
.DiscussionHero {
position: fixed;
top: 40px; /* Stays below the header */
width: 100%;
max-width: 100%;
z-index: 99;
margin: 0 auto;
transition: transform 0.3s ease-in-out;
transform: translateY(0);
}
.DiscussionHero.hidden {
transform: translateY(-100%);
}
/* Add padding to the next element so content is not hidden under the fixed .DiscussionHero */
.DiscussionHero + * {
padding-top: 90px; /* Adjust this value to match the height of .DiscussionHero */
}
}
JavaScript that goes into custom footer:
<script>
document.addEventListener("DOMContentLoaded", function () {
// Wait for Mithril to finish rendering
setTimeout(function () {
let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
let scrollHandlerAttached = false;
let discussionHeader = null;
function onScroll() {
discussionHeader = document.querySelector(".DiscussionHero");
if (!discussionHeader) return;
let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
if (scrollTop > lastScrollTop && scrollTop > 0) {
discussionHeader.classList.add("hidden");
} else if (scrollTop < lastScrollTop) {
discussionHeader.classList.remove("hidden");
}
lastScrollTop = scrollTop <= 0 ? 0 : scrollTop;
}
// Observe DOM changes for .DiscussionHero appearance/disappearance
const observer = new MutationObserver(() => {
const found = document.querySelector(".DiscussionHero");
if (found && !scrollHandlerAttached) {
discussionHeader = found;
// Always show when (re)appearing
discussionHeader.classList.remove("hidden");
lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
window.addEventListener("scroll", onScroll);
scrollHandlerAttached = true;
} else if (!found && scrollHandlerAttached) {
window.removeEventListener("scroll", onScroll);
scrollHandlerAttached = false;
}
});
observer.observe(document.body, { childList: true, subtree: true });
// Initial check in case .DiscussionHero is already present
discussionHeader = document.querySelector(".DiscussionHero");
if (discussionHeader) {
discussionHeader.classList.remove("hidden"); // Ensure visible on first load
lastScrollTop = window.pageYOffset || document.documentElement.scrollTop;
window.addEventListener("scroll", onScroll);
scrollHandlerAttached = true;
}
}, 100);
});
</script>
It works for mobile version only. The logic is to show .DiscussionHero on first load every time. It gets hidden on scroll down, and it becomes visible on scroll up.
In production already: https://audiofil.org/
Edit: Not good. Requires more work... Removing it from LIVE forum until I find proper solution for this. Or somebody else...