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

Widget:GF立绘切换:修订间差异

来自OGAS数据中枢
弃权者留言 | 贡献
无编辑摘要
弃权者留言 | 贡献
无编辑摘要
第1行: 第1行:
(function() {
<script>
(function () {
     function initSwitcher() {
     function initSwitcher() {
         document.querySelectorAll('.gf-infobox-new').forEach(function(box) {
         document.querySelectorAll('.gf-infobox-new').forEach(function (box) {
             if (box.dataset.switcherReady) return;
             if (box.dataset.ready) return;
             box.dataset.switcherReady = 'true';
             box.dataset.ready = '1';


             var container = box.querySelector('.gf-image-container');
             var container = box.querySelector('.gf-image-container');
             var thumbItems = box.querySelectorAll('.gf-thumb-item');
             var thumbs = box.querySelectorAll('.gf-thumb-item');
            if (!container || thumbs.length < 2) return;


             if (!container || thumbItems.length < 2) return;
             thumbs.forEach(function (thumb) {
                thumb.addEventListener('click', function () {
                    if (thumb.classList.contains('active')) return;


            thumbItems.forEach(function(item) {
                    var src = thumb.dataset.src;
                item.addEventListener('click', function() {
                     if (!src) return;
                     if (this.classList.contains('active')) return;


                    // 直接从 data-fullsrc 读取 filepath: 生成的完整URL
                     // 淡出旧图
                    var newSrc = this.dataset.fullsrc;
                     var oldImg = container.querySelector('img');
                    if (!newSrc) return;
 
                     // 淡出
                     var oldImg = container.querySelector('img, a img');
                     if (oldImg) {
                     if (oldImg) {
                         oldImg.style.transition = 'opacity 0.15s ease';
                         oldImg.style.transition = 'opacity 0.15s';
                         oldImg.style.opacity = '0';
                         oldImg.style.opacity = '0';
                     }
                     }


                     setTimeout(function() {
                     setTimeout(function () {
                         // <img> 替换原先的wiki File语法渲染结果(<a><img></a>)
                         // 直接替换为 <img>,不依赖 wiki 语法
                         container.innerHTML = '<img src="' + newSrc + '" style="max-width:100%;max-height:420px;object-fit:contain;transition:opacity 0.3s ease;opacity:0;">';
                         container.innerHTML = '<img src="' + src + '" style="max-width:100%;max-height:420px;object-fit:contain;opacity:0;transition:opacity 0.3s;">';
                         var newImg = container.querySelector('img');
                         var newImg = container.querySelector('img');
                         if (newImg) {
                         if (newImg) {
                             requestAnimationFrame(function() {
                             // 图片加载完再淡入
                            newImg.onload = function () {
                                 newImg.style.opacity = '1';
                                 newImg.style.opacity = '1';
                            };
                            // 已缓存时 onload 不触发,用 rAF 兜底
                            requestAnimationFrame(function () {
                                if (newImg.complete) newImg.style.opacity = '1';
                             });
                             });
                         }
                         }
                     }, 150);
                     }, 150);


                     thumbItems.forEach(function(t) { t.classList.remove('active'); });
                     thumbs.forEach(function (t) { t.classList.remove('active'); });
                     item.classList.add('active');
                     thumb.classList.add('active');
                 });
                 });
             });
             });
第43行: 第47行:
     }
     }


    // 三重保险确保 DOM 就绪后再初始化
     if (document.readyState === 'loading') {
     if (document.readyState === 'loading') {
         document.addEventListener('DOMContentLoaded', initSwitcher);
         document.addEventListener('DOMContentLoaded', initSwitcher);
第49行: 第54行:
     }
     }


     if (window.mw && mw.hook) {
    // MediaWiki 的标准钩子,处理动态加载内容
     if (window.mw) {
         mw.hook('wikipage.content').add(initSwitcher);
         mw.hook('wikipage.content').add(initSwitcher);
     }
     }
})();
})();
</script>

2026年5月15日 (五) 20:53的版本

<script> (function () {

   function initSwitcher() {
       document.querySelectorAll('.gf-infobox-new').forEach(function (box) {
           if (box.dataset.ready) return;
           box.dataset.ready = '1';
           var container = box.querySelector('.gf-image-container');
           var thumbs = box.querySelectorAll('.gf-thumb-item');
           if (!container || thumbs.length < 2) return;
           thumbs.forEach(function (thumb) {
               thumb.addEventListener('click', function () {
                   if (thumb.classList.contains('active')) return;
                   var src = thumb.dataset.src;
                   if (!src) return;
                   // 淡出旧图
                   var oldImg = container.querySelector('img');
                   if (oldImg) {
                       oldImg.style.transition = 'opacity 0.15s';
                       oldImg.style.opacity = '0';
                   }
                   setTimeout(function () {
                       // 直接替换为 <img>,不依赖 wiki 语法
                       container.innerHTML = '<img src="' + src + '" style="max-width:100%;max-height:420px;object-fit:contain;opacity:0;transition:opacity 0.3s;">';
                       var newImg = container.querySelector('img');
                       if (newImg) {
                           // 图片加载完再淡入
                           newImg.onload = function () {
                               newImg.style.opacity = '1';
                           };
                           // 已缓存时 onload 不触发,用 rAF 兜底
                           requestAnimationFrame(function () {
                               if (newImg.complete) newImg.style.opacity = '1';
                           });
                       }
                   }, 150);
                   thumbs.forEach(function (t) { t.classList.remove('active'); });
                   thumb.classList.add('active');
               });
           });
       });
   }
   // 三重保险确保 DOM 就绪后再初始化
   if (document.readyState === 'loading') {
       document.addEventListener('DOMContentLoaded', initSwitcher);
   } else {
       initSwitcher();
   }
   // MediaWiki 的标准钩子,处理动态加载内容
   if (window.mw) {
       mw.hook('wikipage.content').add(initSwitcher);
   }

})(); </script>