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

MediaWiki:Common.js

MediaWiki界面页面
秋绘君留言 | 贡献2026年2月24日 (二) 16:29的版本

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

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/* 萌百风格 Tabs 自动转换脚本 */
$(function() {
    $('.Tabs').each(function() {
        var $tabsContainer = $(this);
        // 1. 检查是否已经初始化过
        if ($tabsContainer.hasClass('tabs-initialized')) return;

        // 2. 提取所有的标签和内容
        var $tabItems = $tabsContainer.find('> .Tab');
        if ($tabItems.length === 0) return;

        // 3. 创建标准的标签栏和内容容器
        var $labelWrapper = $('<div class="TabLabel"></div>');
        var $contentWrapper = $('<div class="TabContent"></div>');

        $tabItems.each(function(index) {
            var $item = $(this);
            var $label = $item.find('> .TabLabelText');
            var $content = $item.find('> .TabContentText');

            // 给第一个设为选中
            if (index === 0) {
                $label.addClass('selected');
                $content.addClass('selected');
            }

            // 绑定点击事件
            $label.on('click', function() {
                $labelWrapper.find('.TabLabelText').removeClass('selected');
                $contentWrapper.find('.TabContentText').removeClass('selected');
                $(this).addClass('selected');
                $content.addClass('selected');
            });

            $labelWrapper.append($label);
            $contentWrapper.append($content);
        });

        // 4. 清空原有的“散装”内容,插入标准结构
        $tabsContainer.empty().append($labelWrapper).append($contentWrapper).addClass('tabs-initialized');
    });
});

/* 首页智能无缝轮播图(强力容错版) */
mw.hook('wikipage.content').add(function($content) {
    $content.find('.dynamic-carousel').each(function() {
        var $carousel = $(this);
        var $track = $carousel.find('.carousel-track');
        var $originalSlides = $carousel.find('.carousel-slide');
        var originalCount = $originalSlides.length;

        // 强制把被隐藏的按钮和容器拉出来
        var $prevBtn = $carousel.find('.prev-btn').show();
        var $nextBtn = $carousel.find('.next-btn').show();
        var $dotsContainer = $carousel.find('.carousel-dots').show();

        if (originalCount <= 1) return; 

        // 复制第一张放到最后,实现无缝循环
        $track.append($originalSlides.first().clone());

        var currentIndex = 0;
        var isAnimating = false;
        var timer;

        // 清空旧圆点,重新生成新圆点
        $dotsContainer.empty();
        for (var i = 0; i < originalCount; i++) {
            var $dot = $('<div class="dot"></div>');
            if (i === 0) $dot.addClass('active');
            $dotsContainer.append($dot);
        }
        var $dots = $dotsContainer.find('.dot');

        function goToSlide(index) {
            if (isAnimating) return;
            isAnimating = true;

            $track.css('transition', 'transform 0.5s ease-in-out');

            if (index < 0) {
                $track.css('transition', 'none');
                $track.css('transform', 'translateX(-' + (originalCount * 100) + '%)');
                $track[0].offsetHeight; 
                $track.css('transition', 'transform 0.5s ease-in-out');
                currentIndex = originalCount - 1;
            } else {
                currentIndex = index;
            }

            $track.css('transform', 'translateX(-' + (currentIndex * 100) + '%)');
            
            $dots.removeClass('active');
            if (currentIndex === originalCount) {
                $dots.eq(0).addClass('active');
            } else {
                $dots.eq(currentIndex).addClass('active');
            }

            setTimeout(function() {
                if (currentIndex === originalCount) {
                    $track.css('transition', 'none');
                    $track.css('transform', 'translateX(0)');
                    currentIndex = 0;
                }
                isAnimating = false;
            }, 500);
        }

        function startTimer() {
            clearInterval(timer);
            timer = setInterval(function() { goToSlide(currentIndex + 1); }, 4000);
        }

        // 绑定点击事件,先解绑防止重复触发
        $nextBtn.off('click').on('click', function() { goToSlide(currentIndex + 1); startTimer(); });
        $prevBtn.off('click').on('click', function() { goToSlide(currentIndex - 1); startTimer(); });
        
        $dotsContainer.on('click', '.dot', function() {
            if (isAnimating) return;
            goToSlide($(this).index());
            startTimer();
        });

        startTimer();
    });
});