跳转到内容
打开/关闭菜单
  • 451 条目
  • 806 文件
  • 22 用户
  • 9167 编辑
Blockland Wiki
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:Common.js:修订间差异

MediaWiki界面页面
ETTW​(留言 | 贡献)
无编辑摘要
ETTW​(留言 | 贡献)
无编辑摘要
第42行: 第42行:
(function() {
(function() {
     'use strict';
     'use strict';
   
    // 如果是 Basic 模式或用户限制动效,JS 直接停止运行,节省性能
    if (document.documentElement.classList.contains('skin-citizen-basic') ||
        window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
        return;
    }


    // 目标选择器:涵盖搜索框、菜单卡片、目录卡片、信息框
     const GLASS_SELECTORS = '.citizen-menu__card, .citizen-toc-card, .citizen-command-palette, .infobox';
     const GLASS_SELECTORS = '.citizen-menu__card, .citizen-toc-card, .citizen-command-palette, .infobox';
   
    const syncLight = (e) => {
        const elements = document.querySelectorAll(GLASS_SELECTORS);
        if (!elements.length) return;


    const updateGlassLighting = (e) => {
         elements.forEach(el => {
         const glassElements = document.querySelectorAll(GLASS_SELECTORS);
       
        if (glassElements.length === 0) return;
 
        glassElements.forEach(el => {
             const rect = el.getBoundingClientRect();
             const rect = el.getBoundingClientRect();
           
             // 计算精准坐标百分比
             // 计算鼠标相对于当前面板的百分比坐标
            // 即使鼠标在面板外,也会计算出坐标,从而实现“隔空折射”
             const x = ((e.clientX - rect.left) / rect.width) * 100;
             const x = ((e.clientX - rect.left) / rect.width) * 100;
             const y = ((e.clientY - rect.top) / rect.height) * 100;
             const y = ((e.clientY - rect.top) / rect.height) * 100;


            // 注入 CSS 变量供 CSS 调用
             el.style.setProperty('--mouse-x', x.toFixed(2) + '%');
             el.style.setProperty('--mouse-x', x.toFixed(2) + '%');
             el.style.setProperty('--mouse-y', y.toFixed(2) + '%');
             el.style.setProperty('--mouse-y', y.toFixed(2) + '%');
第65行: 第66行:
     };
     };


    // 性能优化:使用 RequestAnimationFrame 确保每秒 60 帧丝滑运行且不占用 CPU
     let ticking = false;
     let ticking = false;
     document.addEventListener('mousemove', function(e) {
     document.addEventListener('mousemove', (e) => {
         if (!ticking) {
         if (!ticking) {
             window.requestAnimationFrame(function() {
             window.requestAnimationFrame(() => {
                 updateGlassLighting(e);
                 syncLight(e);
                 ticking = false;
                 ticking = false;
             });
             });

2026年1月30日 (五) 20:26的版本

/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/**
 * 搜索面板弹性动画逻辑
 */
(function() {
    function handlePalette() {
        const palette = document.querySelector('.citizen-command-palette');
        if (palette) {
            // 确保位置居中并触发动画类
            if (!palette.classList.contains('glass-show')) {
                palette.classList.add('glass-show');
            }
        } else {
            // 当面板关闭时,移除所有带有 glass-show 的残留(虽然通常会被销毁)
            const activePalettes = document.querySelectorAll('.glass-show');
            activePalettes.forEach(p => p.classList.remove('glass-show'));
        }
    }

    // 每 50ms 检查一次搜索框状态(保持和 V20 脚本逻辑一致)
    setInterval(handlePalette, 50);
})();
// 在 MediaWiki:Common.js 中尝试
$(function() {
    if ($('#p-navigation').length) {
        var adHtml = '<div id="sidebar-ad"></div>';
        $('#p-navigation').after(adHtml);
        // 使用 API 获取解析后的模板内容并注入
        $.get(mw.util.wikiScript('api'), {
            action: 'parse',
            text: '{{CitizenAd}}',
            format: 'json'
        }, function(data) {
            $('#sidebar-ad').html(data.parse.text['*']);
        });
    }
});
/**
 * Blockland Wiki Liquid Glass Lighting System
 * 全局液态玻璃光影联动系统
 */
(function() {
    'use strict';
    
    // 如果是 Basic 模式或用户限制动效,JS 直接停止运行,节省性能
    if (document.documentElement.classList.contains('skin-citizen-basic') || 
        window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
        return;
    }

    const GLASS_SELECTORS = '.citizen-menu__card, .citizen-toc-card, .citizen-command-palette, .infobox';
    
    const syncLight = (e) => {
        const elements = document.querySelectorAll(GLASS_SELECTORS);
        if (!elements.length) return;

        elements.forEach(el => {
            const rect = el.getBoundingClientRect();
            // 计算精准坐标百分比
            const x = ((e.clientX - rect.left) / rect.width) * 100;
            const y = ((e.clientY - rect.top) / rect.height) * 100;

            el.style.setProperty('--mouse-x', x.toFixed(2) + '%');
            el.style.setProperty('--mouse-y', y.toFixed(2) + '%');
        });
    };

    let ticking = false;
    document.addEventListener('mousemove', (e) => {
        if (!ticking) {
            window.requestAnimationFrame(() => {
                syncLight(e);
                ticking = false;
            });
            ticking = true;
        }
    }, { passive: true });
})();