MediaWiki:Common.js:修订间差异
MediaWiki界面页面
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第36行: | 第36行: | ||
} | } | ||
}); | }); | ||
/** | |||
* Blockland Wiki Liquid Glass Lighting System | |||
* 全局液态玻璃光影联动系统 | |||
*/ | |||
(function() { | |||
'use strict'; | |||
// 目标选择器:涵盖搜索框、菜单卡片、目录卡片、信息框 | |||
const GLASS_SELECTORS = '.citizen-menu__card, .citizen-toc-card, .citizen-command-palette, .infobox'; | |||
const updateGlassLighting = (e) => { | |||
const glassElements = document.querySelectorAll(GLASS_SELECTORS); | |||
if (glassElements.length === 0) return; | |||
glassElements.forEach(el => { | |||
const rect = el.getBoundingClientRect(); | |||
// 计算鼠标相对于当前面板的百分比坐标 | |||
// 即使鼠标在面板外,也会计算出坐标,从而实现“隔空折射” | |||
const x = ((e.clientX - rect.left) / rect.width) * 100; | |||
const y = ((e.clientY - rect.top) / rect.height) * 100; | |||
// 注入 CSS 变量供 CSS 调用 | |||
el.style.setProperty('--mouse-x', x.toFixed(2) + '%'); | |||
el.style.setProperty('--mouse-y', y.toFixed(2) + '%'); | |||
}); | |||
}; | |||
// 性能优化:使用 RequestAnimationFrame 确保每秒 60 帧丝滑运行且不占用 CPU | |||
let ticking = false; | |||
document.addEventListener('mousemove', function(e) { | |||
if (!ticking) { | |||
window.requestAnimationFrame(function() { | |||
updateGlassLighting(e); | |||
ticking = false; | |||
}); | |||
ticking = true; | |||
} | |||
}, { passive: true }); | |||
})(); | |||
2026年1月30日 (五) 20:20的版本
/* 这里的任何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';
// 目标选择器:涵盖搜索框、菜单卡片、目录卡片、信息框
const GLASS_SELECTORS = '.citizen-menu__card, .citizen-toc-card, .citizen-command-palette, .infobox';
const updateGlassLighting = (e) => {
const glassElements = document.querySelectorAll(GLASS_SELECTORS);
if (glassElements.length === 0) return;
glassElements.forEach(el => {
const rect = el.getBoundingClientRect();
// 计算鼠标相对于当前面板的百分比坐标
// 即使鼠标在面板外,也会计算出坐标,从而实现“隔空折射”
const x = ((e.clientX - rect.left) / rect.width) * 100;
const y = ((e.clientY - rect.top) / rect.height) * 100;
// 注入 CSS 变量供 CSS 调用
el.style.setProperty('--mouse-x', x.toFixed(2) + '%');
el.style.setProperty('--mouse-y', y.toFixed(2) + '%');
});
};
// 性能优化:使用 RequestAnimationFrame 确保每秒 60 帧丝滑运行且不占用 CPU
let ticking = false;
document.addEventListener('mousemove', function(e) {
if (!ticking) {
window.requestAnimationFrame(function() {
updateGlassLighting(e);
ticking = false;
});
ticking = true;
}
}, { passive: true });
})();