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

来自部落与弯刀Wiki

(创建页面,内容为“→‎这里的任何JavaScript将为所有用户在每次页面载入时加载。 document.addEventListener("DOMContentLoaded", function () { const tocLinks = A…”
 
 
(未显示同一用户的9个中间版本)
第1行: 第1行:
 
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
 
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
document.addEventListener("DOMContentLoaded", function () {
+
function initToc() {
    const tocLinks = Array.from(document.querySelectorAll("#toc a"));
+
var tocLinks = Array.prototype.slice.call(document.querySelectorAll("#toc a"));
    const sections = tocLinks.map(link => {
+
if (tocLinks.length === 0) {
        const target = document.getElementById(decodeURIComponent(link.getAttribute("href").substring(1)));
+
    console.warn("TOC 高亮:未找到目录链接");
        return target ? { link, target } : null;
+
    return;
    }).filter(Boolean);
+
}
 +
 +
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);
 +
}
  
    function onScroll() {
+
initToc();
        let currentSection = null;
 
        const scrollTop = window.scrollY + 100; // 提前一点触发高亮
 
 
 
        for (let i = 0; i < sections.length; i++) {
 
            const sectionTop = sections[i].target.offsetTop;
 
            if (scrollTop >= sectionTop) {
 
                currentSection = sections[i];
 
            } else {
 
                break;
 
            }
 
        }
 
 
 
        tocLinks.forEach(link => link.classList.remove("active-section"));
 
        if (currentSection) {
 
            currentSection.link.classList.add("active-section");
 
        }
 
    }
 
 
 
    window.addEventListener("scroll", onScroll);
 
    onScroll(); // 初始加载时触发一次
 
});
 

2025年6月10日 (二) 18:57的最新版本

/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
function initToc() {
	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);
}

initToc();