CCCPaste

Commons.js

;(function() {
    'use strict';

    document.addEventListener('DOMContentLoaded', function() {

        // --- 1. Get Element References ---
        let prevScrollPos = window.scrollY || window.pageYOffset;
        const header = document.getElementById("mainHeader");
        const toc = document.getElementById("toc");

        // Exit if the main header is not found
        if (!header) {
            return;
        }

        const headerHeight = header.offsetHeight;

        // --- 2. Scroll Event Listener ---
        window.onscroll = function() {
            const currentScrollPos = window.scrollY || window.pageYOffset;

            // =======================================================
            // A. Main Header Hide/Show Logic
            // =======================================================

            // Scrolling UP - Show the header
            if (prevScrollPos > currentScrollPos) {
                header.classList.remove("header-hidden");
            }
            // Scrolling DOWN AND past the header height - Hide the header
            else if (currentScrollPos > headerHeight) {
                header.classList.add("header-hidden");
            }

            // =======================================================
            // B. Dynamic TOC Scroll Logic
            // =======================================================

            // Check if the TOC element was found
            if (toc) {
                // Damping Factor: Controls the speed (5 is a good balance)
                const dampingFactor = 5;
                const scrollOffset = currentScrollPos / dampingFactor;

                toc.style.transform = `translateY(-${scrollOffset}px)`;
            }

            // =======================================================
            // C. Update Position
            // =======================================================

            prevScrollPos = currentScrollPos;
        };
    });
})();