打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:Common.js

MediaWiki界面页面
OnlyOTO留言 | 贡献2026年3月31日 (二) 15:55的版本

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

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */

/* USERNAME */
$( function() {
    if ( mw.user.isNamed() ) {
        $( '.insertusername' ).text( mw.user.getName() );
    } else {
        $( '.insertusername' ).text( '访客' );
    }
} );

/* INFOBOX */
$('.infobox').hide();

(function() {
    mw.loader.using('jquery', function() {
        $(function() {
            if (document.querySelector('.magnetic-pointer-original')) return;

            const pointer = document.createElement('div');
            pointer.className = 'magnetic-pointer-original';
            pointer.innerHTML = '<div></div><div></div><div></div><div></div>';
            document.body.appendChild(pointer);

            const style = document.createElement('style');
            style.textContent = `
.magnetic-pointer-original {
    --width: 4rem;
    --height: 4rem;
    position: fixed;
    top: calc(var(--height) / -2);
    left: calc(var(--width) / -2);
    width: var(--width);
    height: var(--height);
    transition: all 0.2s ease-out;
    pointer-events: none;
    z-index: 99999;
}
.magnetic-pointer-original div {
    position: absolute;
    width: 0.8rem;
    height: 0.8rem;
    border-color: #17f700;
    background: transparent !important;
}
.magnetic-pointer-original div:nth-child(1) {top:0;left:0;border-top:3px solid;border-left:3px solid;}
.magnetic-pointer-original div:nth-child(2) {top:0;right:0;border-top:3px solid;border-right:3px solid;}
.magnetic-pointer-original div:nth-child(3) {bottom:0;left:0;border-bottom:3px solid;border-left:3px solid;}
.magnetic-pointer-original div:nth-child(4) {bottom:0;right:0;border-bottom:3px solid;border-right:3px solid;}
            `;
            document.head.appendChild(style);

            let currentTarget = null;
            let currentX = 0, currentY = 0;

            const onMouseMove = function(e) {
                let x = e.clientX;
                let y = e.clientY;
                if (currentTarget) {
                    const rect = currentTarget.getBoundingClientRect();
                    const centerX = rect.left + rect.width / 2;
                    const centerY = rect.top + rect.height / 2;
                    x = centerX + (x - centerX) * 0.1;
                    y = centerY + (y - centerY) * 0.1;
                }
                currentX = x;
                currentY = y;
                pointer.style.transform = `translate(${currentX}px, ${currentY}px)`;
            };

            const onMouseEnter = function(e) {
                currentTarget = e.currentTarget;
                const rect = currentTarget.getBoundingClientRect();
                pointer.style.setProperty('--width', rect.width + window.innerWidth / 50 + 'px');
                pointer.style.setProperty('--height', rect.height + window.innerWidth / 50 + 'px');
            };

            const onMouseLeave = function() {
                currentTarget = null;
                pointer.style.setProperty('--width', '4rem');
                pointer.style.setProperty('--height', '4rem');
            };

            const bindTargets = function() {
                document.querySelectorAll('._target').forEach(el => {
                    if (el._magneticBound) return;
                    el._magneticBound = true;
                    el.addEventListener('mouseenter', onMouseEnter);
                    el.addEventListener('mouseleave', onMouseLeave);
                });
            };

            window.addEventListener('mousemove', onMouseMove);
            bindTargets();
            const observer = new MutationObserver(bindTargets);
            observer.observe(document.body, { childList: true, subtree: true });
        });
    });
})();