MediaWiki:Citizen.js:修订间差异
MediaWiki界面页面
更多操作
无编辑摘要 标签:已被回退 |
无编辑摘要 标签:已被回退 |
||
| 第3行: | 第3行: | ||
const allowPages = [ | const allowPages = [ | ||
"首页", | "首页", | ||
"Main Page | "Main Page" | ||
]; | ]; | ||
const currentPage = mw.config.get("wgTitle"); | const currentPage = mw.config.get("wgTitle"); | ||
| 第15行: | 第14行: | ||
mw.loader.using( [], function() { | mw.loader.using( [], function() { | ||
const ptr = document.createElement('div'); | const ptr = document.createElement('div'); | ||
ptr.className = 'magnetic-true-corner'; | ptr.className = 'magnetic-true-corner'; | ||
| 第21行: | 第19行: | ||
document.body.appendChild(ptr); | document.body.appendChild(ptr); | ||
const css = document.createElement('style'); | const css = document.createElement('style'); | ||
css.textContent = ` | css.textContent = ` | ||
body, body * { cursor: none !important; } | |||
body, body * { | |||
} | |||
.magnetic-true-corner{ | .magnetic-true-corner{ | ||
| 第41行: | 第29行: | ||
pointer-events:none; | pointer-events:none; | ||
z-index:999999!important; | z-index:999999!important; | ||
/* | /* 暂时关掉旋转,保证能显示 */ | ||
} | } | ||
.magnetic-true-corner i{ | .magnetic-true-corner i{ | ||
position:absolute; | position:absolute; | ||
| 第95行: | 第77行: | ||
ptr.style.left = (smoothX - 20) + 'px'; | ptr.style.left = (smoothX - 20) + 'px'; | ||
ptr.style.top = ( | ptr.style.top = (my - 20) + 'px'; | ||
ptr.style.width = curW + 'px'; | ptr.style.width = curW + 'px'; | ||
ptr.style.height = curH + 'px'; | ptr.style.height = curH + 'px'; | ||
| 第104行: | 第86行: | ||
const sel = [ | const sel = [ | ||
'.citizen-nav a', | '.citizen-nav a','.citizen-menu a','.citizen-button', | ||
'.citizen-action-button','.cdx-button','.mw-editsection a', | |||
'#citizen-header__nav a','.citizen-sidebar a','._target', | |||
'.citizen-action-button', | '.commentstreams-button','.commentstreams-submit', | ||
'.commentstreams-header button','.commentstreams-box button', | |||
'.mw-ui-button','button','a[role="button"]' | |||
'#citizen-header__nav a', | |||
'.commentstreams-button', | |||
'.commentstreams-header button', | |||
'.mw-ui-button', | |||
].join(','); | ].join(','); | ||
| 第126行: | 第98行: | ||
if(el._magBind)return; | if(el._magBind)return; | ||
el._magBind = 1; | el._magBind = 1; | ||
el.addEventListener('mouseenter', ()=> | el.addEventListener('mouseenter', ()=> hoverEl = el); | ||
el.addEventListener('mouseleave', ()=> hoverEl = null); | |||
el.addEventListener('mouseleave', ()=> | |||
}); | }); | ||
} | } | ||
bind(); | bind(); | ||
new MutationObserver(bind).observe(document.body,{childList:true,subtree:true}); | new MutationObserver(bind).observe(document.body,{childList:true,subtree:true}); | ||
}); | }); | ||
})(); | })(); | ||
2026年3月31日 (二) 23:15的版本
(function() {
// 页面白名单
const allowPages = [
"首页",
"Main Page"
];
const currentPage = mw.config.get("wgTitle");
if( !allowPages.includes(currentPage) ){
return;
}
if( window.magneticCursorInit ) return;
window.magneticCursorInit = true;
mw.loader.using( [], function() {
const ptr = document.createElement('div');
ptr.className = 'magnetic-true-corner';
ptr.innerHTML = `<i></i><i></i><i></i><i></i>`;
document.body.appendChild(ptr);
const css = document.createElement('style');
css.textContent = `
body, body * { cursor: none !important; }
.magnetic-true-corner{
position:fixed;
left:0;top:0;
width:0;height:0;
pointer-events:none;
z-index:999999!important;
/* 暂时关掉旋转,保证能显示 */
}
.magnetic-true-corner i{
position:absolute;
width:14px;height:14px;
border:2px solid #888e99;
background:transparent!important;
box-shadow:none!important;
}
.magnetic-true-corner i:nth-child(1){top:-2px;left:-2px;border-right:none;border-bottom:none;}
.magnetic-true-corner i:nth-child(2){top:-2px;right:-2px;border-left:none;border-bottom:none;}
.magnetic-true-corner i:nth-child(3){bottom:-2px;left:-2px;border-right:none;border-top:none;}
.magnetic-true-corner i:nth-child(4){bottom:-2px;right:-2px;border-left:none;border-top:none;}
`;
document.head.appendChild(css);
let hoverEl = null;
let mx = 0, my = 0;
let smoothX = 0, smoothY = 0;
let curW = 40, curH = 40;
document.addEventListener('mousemove', e => {
mx = e.clientX;
my = e.clientY;
});
function loop(){
const ease = 0.15;
if(hoverEl){
const r = hoverEl.getBoundingClientRect();
const targetX = r.left + r.width / 2;
const targetY = r.top + r.height / 2;
smoothX += (targetX - smoothX) * ease;
smoothY += (targetY - smoothY) * ease;
curW = r.width;
curH = r.height;
ptr.style.left = (smoothX - curW / 2) + 'px';
ptr.style.top = (smoothY - curH / 2) + 'px';
ptr.style.width = curW + 'px';
ptr.style.height = curH + 'px';
}else{
curW = 40;
curH = 40;
smoothX += (mx - smoothX) * ease;
smoothY += (my - smoothY) * ease;
ptr.style.left = (smoothX - 20) + 'px';
ptr.style.top = (my - 20) + 'px';
ptr.style.width = curW + 'px';
ptr.style.height = curH + 'px';
}
requestAnimationFrame(loop);
}
loop();
const sel = [
'.citizen-nav a','.citizen-menu a','.citizen-button',
'.citizen-action-button','.cdx-button','.mw-editsection a',
'#citizen-header__nav a','.citizen-sidebar a','._target',
'.commentstreams-button','.commentstreams-submit',
'.commentstreams-header button','.commentstreams-box button',
'.mw-ui-button','button','a[role="button"]'
].join(',');
function bind(){
document.querySelectorAll(sel).forEach(el=>{
if(el._magBind)return;
el._magBind = 1;
el.addEventListener('mouseenter', ()=> hoverEl = el);
el.addEventListener('mouseleave', ()=> hoverEl = null);
});
}
bind();
new MutationObserver(bind).observe(document.body,{childList:true,subtree:true});
});
})();