“MediaWiki:Common.js”的版本间的差异

来自部落与弯刀Wiki

第1行: 第1行:
 
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
 
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
(function () {
+
document.addEventListener("DOMContentLoaded", function () {
     function initTocHighlighter() {
+
     setTimeout(function () {
         const tocLinks = Array.from(document.querySelectorAll("#toc a"));
+
         var tocLinks = Array.prototype.slice.call(document.querySelectorAll("#toc a"));
 
         if (tocLinks.length === 0) {
 
         if (tocLinks.length === 0) {
 
             console.warn("TOC 高亮:未找到目录链接");
 
             console.warn("TOC 高亮:未找到目录链接");
第8行: 第8行:
 
         }
 
         }
  
         const sections = tocLinks.map(link => {
+
         var sections = tocLinks.map(function (link) {
             const rawId = link.getAttribute("href").slice(1); // 去除 # 前缀
+
             var rawId = link.getAttribute("href").slice(1); // 去除 #
             const target = document.getElementById(rawId) || document.querySelector(`[id="${CSS.escape(rawId)}"]`);
+
             var target = document.getElementById(rawId) || document.querySelector('[id="' + CSS.escape(rawId) + '"]');
             return target ? { link, target } : null;
+
             return target ? { link: link, target: target } : null;
         }).filter(Boolean);
+
         }).filter(function (s) { return s !== null; });
  
 
         if (sections.length === 0) {
 
         if (sections.length === 0) {
第19行: 第19行:
  
 
         function updateHighlight() {
 
         function updateHighlight() {
             const scrollY = window.scrollY + 120;
+
             var scrollY = window.scrollY + 120;
             let current = null;
+
             var current = null;
  
             for (let section of sections) {
+
             for (var i = 0; i < sections.length; i++) {
                 if (section.target.offsetTop <= scrollY) {
+
                 if (sections[i].target.offsetTop <= scrollY) {
                     current = section;
+
                     current = sections[i];
 
                 } else {
 
                 } else {
 
                     break;
 
                     break;
第30行: 第30行:
 
             }
 
             }
  
             tocLinks.forEach(link => link.classList.remove("active-section"));
+
             tocLinks.forEach(function (link) {
 +
                link.classList.remove("active-section");
 +
            });
 +
 
 
             if (current) {
 
             if (current) {
 
                 current.link.classList.add("active-section");
 
                 current.link.classList.add("active-section");
第39行: 第42行:
 
         window.addEventListener("scroll", updateHighlight);
 
         window.addEventListener("scroll", updateHighlight);
 
         updateHighlight();
 
         updateHighlight();
         console.log("📘 TOC 高亮脚本已初始化,监测段落数:", sections.length);
+
         console.log("📘 TOC 高亮脚本初始化成功,监听段落数:", sections.length);
     }
+
     }, 0);
 
+
});
    // 加载完成后执行:保险起见用双触发机制
 
    document.addEventListener("DOMContentLoaded", () => {
 
        requestAnimationFrame(() => {
 
            initTocHighlighter();
 
        });
 
    });
 
})();
 

2025年6月10日 (二) 18:34的版本

/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
document.addEventListener("DOMContentLoaded", function () {
    setTimeout(function () {
        var tocLinks = Array.prototype.slice.call(document.querySelectorAll("#toc a"));
        if (tocLinks.length === 0) {
            console.warn("TOC 高亮:未找到目录链接");
            return;
        }

        var sections = tocLinks.map(function (link) {
            var rawId = link.getAttribute("href").slice(1); // 去除 #
            var target = document.getElementById(rawId) || document.querySelector('[id="' + CSS.escape(rawId) + '"]');
            return target ? { link: link, target: target } : null;
        }).filter(function (s) { return s !== null; });

        if (sections.length === 0) {
            console.warn("TOC 高亮:未能匹配任何章节");
        }

        function updateHighlight() {
            var scrollY = window.scrollY + 120;
            var current = null;

            for (var i = 0; i < sections.length; i++) {
                if (sections[i].target.offsetTop <= scrollY) {
                    current = sections[i];
                } else {
                    break;
                }
            }

            tocLinks.forEach(function (link) {
                link.classList.remove("active-section");
            });

            if (current) {
                current.link.classList.add("active-section");
                console.log("当前章节:", current.link.textContent);
            }
        }

        window.addEventListener("scroll", updateHighlight);
        updateHighlight();
        console.log("📘 TOC 高亮脚本初始化成功,监听段落数:", sections.length);
    }, 0);
});