MediaWiki:Common.js

来自部落与弯刀Wiki

Skyswordkill讨论 | 贡献2025年6月10日 (二) 18:54的版本

注意:在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:前往菜单 → 设置(Mac为Opera → Preferences),然后隐私和安全 → 清除浏览数据 → 缓存的图片和文件
/* 这里的任何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);
}

function initMobileToc() {
	var toc = document.getElementById("toc");
    if (!toc) return;

    var btn = document.createElement("div");
    btn.id = "toc-toggle-btn";
    btn.innerText = "目录";

    btn.addEventListener("click", function () {
        toc.classList.toggle("toc-visible");
    });

    // 只在移动端插入按钮
    if (window.innerWidth <= 768) {
        document.body.appendChild(btn);
    }
}
}

initToc();
initMobileToc();