-
汇聚密码安全智慧 共享实战经验!
- 我们目前有643个页面,13个用户,731次编辑。
MediaWiki:Mobile.js:修订间差异
跳转到导航
跳转到搜索
(创建页面,内容为“→这里的任何JavaScript将为使用移动版网站的用户加载: (function() { 'use strict'; // 初始化公告滚动 function initSiteNoticeScroll() { var self = $('#siteNoticeScroll'); if (!self.length || !self[0]) return; var ul = self.find('ul:first'); if (!ul.length) return; var lis = ul.find('li'); if (lis.length <= 1) return; // 如果只有一个或没有项目…”) |
无编辑摘要 |
||
| 第1行: | 第1行: | ||
/ | // 移动端公告滚动效果 | ||
// 兼容 MobileFrontend 和桌面端 | |||
(function() { | (function() { | ||
'use strict'; | 'use strict'; | ||
| 第28行: | 第30行: | ||
lis.width(containerWidth); | lis.width(containerWidth); | ||
// | // 设置初始位置和过渡效果 | ||
ul.css(' | ul.css({ | ||
'margin-left': '0px', | |||
'transition': 'margin-left 0.73s ease-in-out' | |||
}); | |||
// 开始滚动 | // 开始滚动 | ||
| 第36行: | 第41行: | ||
if (!dataset) return; | if (!dataset) return; | ||
var | var currentLeft = parseInt(dataset.left) || 0; | ||
var newLeft = | var totalLength = parseInt(dataset.length) || lis.length; | ||
var newLeft = currentLeft + 1; | |||
if (newLeft >= | // 如果到达最后一个,重置到第一个(索引0) | ||
newLeft = | if (newLeft >= totalLength) { | ||
newLeft = 0; | |||
} | } | ||
ul.css(' | ul.css({ | ||
'margin-left': -(newLeft * containerWidth) + 'px', | |||
'transition': 'margin-left 0.73s ease-in-out' | |||
}); | |||
dataset.left = newLeft; | dataset.left = newLeft; | ||
}, 5000); | }, 5000); | ||
| 第56行: | 第66行: | ||
var currentLeft = parseInt(ul[0].dataset.left) || 0; | var currentLeft = parseInt(ul[0].dataset.left) || 0; | ||
if (currentLeft | if (currentLeft < 0) currentLeft = 0; | ||
ul.css(' | ul.css({ | ||
'margin-left': -(currentLeft * containerWidth) + 'px', | |||
'transition': 'margin-left 0.37s ease-in-out' | |||
}); | |||
}); | }); | ||
| 第66行: | 第79行: | ||
// 初始化用户提示 | // 初始化用户提示 | ||
function initUserPrompt() { | function initUserPrompt() { | ||
var siteNoticeScroll = $('#siteNoticeScroll'); | |||
return; | if (siteNoticeScroll.length === 0) { | ||
return false; | |||
} | |||
var ul = siteNoticeScroll.find('ul:first'); | |||
if (ul.length === 0) { | |||
return false; | |||
} | } | ||
| 第83行: | 第102行: | ||
// 如果页面没有 userPrompt 元素,创建一个 | // 如果页面没有 userPrompt 元素,创建一个 | ||
if (promptElement.length === 0) { | if (promptElement.length === 0) { | ||
promptElement = $('<li id="userPrompt"></li>'); | |||
ul.append(promptElement); | |||
} | } | ||
// 设置内容 | |||
if (currentUser && currentUser !== null && currentUser !== '') { | |||
// 已登录用户 | |||
promptElement.html('<strong>欢迎回来,' + currentUser + '!感谢您对炼石百科的贡献!</strong>'); | |||
} else { | |||
// 未登录用户 | |||
promptElement.html('<strong>欢迎加入炼石百科<a href="/wiki/Special:用户登录"><font color="#3862AE">注册一个账号</font></a>,一起参与编写吧!</strong>'); | |||
} | } | ||
return true; | |||
} | } | ||
// 等待 DOM 和 MediaWiki 加载完成 | // 等待 DOM 和 MediaWiki 加载完成 | ||
function init() { | function init() { | ||
// | // 先初始化用户提示(必须在滚动初始化之前) | ||
initUserPrompt(); | var promptAdded = initUserPrompt(); | ||
// | // 延迟初始化滚动效果,确保 DOM 完全更新 | ||
initSiteNoticeScroll(); | setTimeout(function() { | ||
initSiteNoticeScroll(); | |||
}, promptAdded ? 100 : 0); | |||
} | } | ||
2025年12月19日 (五) 07:55的版本
// 移动端公告滚动效果
// 兼容 MobileFrontend 和桌面端
(function() {
'use strict';
// 初始化公告滚动
function initSiteNoticeScroll() {
var self = $('#siteNoticeScroll');
if (!self.length || !self[0]) return;
var ul = self.find('ul:first');
if (!ul.length) return;
var lis = ul.find('li');
if (lis.length <= 1) return; // 如果只有一个或没有项目,不需要滚动
var containerWidth = self.width();
if (containerWidth === 0) {
// 如果宽度为0,可能是DOM还未完全加载,延迟重试
setTimeout(initSiteNoticeScroll, 100);
return;
}
ul.width(containerWidth * lis.length).attr({
'data-left': 0,
'data-length': lis.length
});
lis.width(containerWidth);
// 设置初始位置和过渡效果
ul.css({
'margin-left': '0px',
'transition': 'margin-left 0.73s ease-in-out'
});
// 开始滚动
var scrollInterval = window.setInterval(function() {
var dataset = ul[0].dataset;
if (!dataset) return;
var currentLeft = parseInt(dataset.left) || 0;
var totalLength = parseInt(dataset.length) || lis.length;
var newLeft = currentLeft + 1;
// 如果到达最后一个,重置到第一个(索引0)
if (newLeft >= totalLength) {
newLeft = 0;
}
ul.css({
'margin-left': -(newLeft * containerWidth) + 'px',
'transition': 'margin-left 0.73s ease-in-out'
});
dataset.left = newLeft;
}, 5000);
// 窗口大小改变时重新计算
$(window).on('resize', function() {
containerWidth = self.width();
if (containerWidth === 0) return;
ul.width(containerWidth * lis.length);
lis.width(containerWidth);
var currentLeft = parseInt(ul[0].dataset.left) || 0;
if (currentLeft < 0) currentLeft = 0;
ul.css({
'margin-left': -(currentLeft * containerWidth) + 'px',
'transition': 'margin-left 0.37s ease-in-out'
});
});
// 保存 interval ID,以便后续清理
self.data('scrollInterval', scrollInterval);
}
// 初始化用户提示
function initUserPrompt() {
var siteNoticeScroll = $('#siteNoticeScroll');
if (siteNoticeScroll.length === 0) {
return false;
}
var ul = siteNoticeScroll.find('ul:first');
if (ul.length === 0) {
return false;
}
var currentUser = null;
try {
if (typeof mw !== 'undefined' && mw.config && mw.config.get) {
currentUser = mw.config.get('wgUserName');
}
} catch (e) {
// 忽略错误
}
var promptElement = $('#userPrompt');
// 如果页面没有 userPrompt 元素,创建一个
if (promptElement.length === 0) {
promptElement = $('<li id="userPrompt"></li>');
ul.append(promptElement);
}
// 设置内容
if (currentUser && currentUser !== null && currentUser !== '') {
// 已登录用户
promptElement.html('<strong>欢迎回来,' + currentUser + '!感谢您对炼石百科的贡献!</strong>');
} else {
// 未登录用户
promptElement.html('<strong>欢迎加入炼石百科<a href="/wiki/Special:用户登录"><font color="#3862AE">注册一个账号</font></a>,一起参与编写吧!</strong>');
}
return true;
}
// 等待 DOM 和 MediaWiki 加载完成
function init() {
// 先初始化用户提示(必须在滚动初始化之前)
var promptAdded = initUserPrompt();
// 延迟初始化滚动效果,确保 DOM 完全更新
setTimeout(function() {
initSiteNoticeScroll();
}, promptAdded ? 100 : 0);
}
// 多种初始化方式,确保在移动端和桌面端都能工作
if (typeof $ !== 'undefined') {
// jQuery 已加载
$(document).ready(function() {
init();
});
// 如果已经在 ready 状态,立即执行
if (document.readyState === 'complete' || document.readyState === 'interactive') {
setTimeout(init, 100);
}
} else {
// 等待 jQuery 加载
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
if (typeof $ !== 'undefined') {
setTimeout(init, 100);
}
});
} else {
// 如果 DOM 已加载,等待 jQuery
var checkJQuery = setInterval(function() {
if (typeof $ !== 'undefined') {
clearInterval(checkJQuery);
init();
}
}, 100);
// 10秒后停止检查
setTimeout(function() {
clearInterval(checkJQuery);
}, 10000);
}
}
// 使用 MediaWiki 的 hook(如果可用)
if (typeof mw !== 'undefined' && mw.hook) {
mw.hook('mobile.init').add(function() {
setTimeout(init, 200);
});
}
})();