MediaWiki:Common.js:修订间差异
MediaWiki界面页面
更多操作
无编辑摘要 标签:已被回退 |
无编辑摘要 标签:已被回退 |
||
| 第43行: | 第43行: | ||
}); | }); | ||
/* | /* 首页智能无缝轮播图(强力容错版) */ | ||
mw.hook('wikipage.content').add(function($content) { | mw.hook('wikipage.content').add(function($content) { | ||
$content.find('.dynamic-carousel').each(function() { | $content.find('.dynamic-carousel').each(function() { | ||
var $carousel = $(this); | var $carousel = $(this); | ||
var $track = $carousel.find('.carousel-track'); | var $track = $carousel.find('.carousel-track'); | ||
var $originalSlides = $ | var $originalSlides = $carousel.find('.carousel-slide'); | ||
var originalCount = $originalSlides.length; | 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 currentIndex = 0; | ||
var isAnimating = false; | var isAnimating = false; | ||
var timer; | var timer; | ||
// | // 清空旧圆点,重新生成新圆点 | ||
$dotsContainer.empty(); | |||
for (var i = 0; i < originalCount; i++) { | for (var i = 0; i < originalCount; i++) { | ||
var $dot = $('<div class="dot"></div>'); | var $dot = $('<div class="dot"></div>'); | ||
| 第74行: | 第74行: | ||
var $dots = $dotsContainer.find('.dot'); | var $dots = $dotsContainer.find('.dot'); | ||
function goToSlide(index) { | function goToSlide(index) { | ||
if (isAnimating) return; | if (isAnimating) return; | ||
isAnimating = true; | isAnimating = true; | ||
$track.css('transition', 'transform 0.5s ease-in-out'); | |||
$track.css('transition', 'transform 0.5s | |||
if (index < 0) { | if (index < 0) { | ||
$track.css('transition', 'none'); | $track.css('transition', 'none'); | ||
$track.css('transform', 'translateX(-' + (originalCount * 100) + '%)'); | $track.css('transform', 'translateX(-' + (originalCount * 100) + '%)'); | ||
$track[0].offsetHeight; | $track[0].offsetHeight; | ||
$track.css('transition', 'transform 0.5s | $track.css('transition', 'transform 0.5s ease-in-out'); | ||
currentIndex = originalCount - 1; | currentIndex = originalCount - 1; | ||
} else { | } else { | ||
| 第103行: | 第90行: | ||
} | } | ||
$track.css('transform', 'translateX(-' + (currentIndex * 100) + '%)'); | |||
$track.css('transform', 'translateX(-' + | |||
$dots.removeClass('active'); | |||
if (currentIndex === originalCount) { | |||
$dots.eq(0).addClass('active'); | |||
} else { | |||
$dots.eq(currentIndex).addClass('active'); | |||
} | |||
setTimeout(function() { | setTimeout(function() { | ||
if (currentIndex === originalCount) { | if (currentIndex === originalCount) { | ||
$track.css('transition', 'none'); | $track.css('transition', 'none'); | ||
| 第121行: | 第111行: | ||
function startTimer() { | function startTimer() { | ||
clearInterval(timer); | clearInterval(timer); | ||
timer = setInterval(function() { | 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; | if (isAnimating) return; | ||
goToSlide($(this).index()); | goToSlide($(this).index()); | ||
2026年2月24日 (二) 16:29的版本
/* 这里的任何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();
});
});