-
汇聚密码安全智慧 共享实战经验!
- 我们目前有643个页面,13个用户,731次编辑。
MediaWiki:Mobile.js:修订间差异
跳转到导航
跳转到搜索
无编辑摘要 标签:手工回退 移动版编辑 移动版网页编辑 |
无编辑摘要 标签:移动版编辑 移动版网页编辑 |
||
| 第108行: | 第108行: | ||
} | } | ||
ul.width(containerWidth * lis.length).attr({ | // 设置 ul 和 li 的宽度 | ||
ul.css({ | |||
'width': (containerWidth * lis.length) + 'px', | |||
'-webkit-transform': 'translateX(0px)', | |||
'-moz-transform': 'translateX(0px)', | |||
'-ms-transform': 'translateX(0px)', | |||
'-o-transform': 'translateX(0px)', | |||
'transform': 'translateX(0px)', | |||
'-webkit-transition': 'transform 0.73s ease-in-out', | |||
'-moz-transition': 'transform 0.73s ease-in-out', | |||
'-o-transition': 'transform 0.73s ease-in-out', | |||
'transition': 'transform 0.73s ease-in-out' | |||
}).attr({ | |||
'data-left': 0, | 'data-left': 0, | ||
'data-length': lis.length | 'data-length': lis.length | ||
}); | }); | ||
lis.width | lis.css('width', containerWidth + 'px'); | ||
log('设置 ul 宽度: ' + (containerWidth * lis.length) + ', 每个 li 宽度: ' + containerWidth); | log('设置 ul 宽度: ' + (containerWidth * lis.length) + ', 每个 li 宽度: ' + containerWidth); | ||
// | // 强制重绘 | ||
ul | ul[0].offsetHeight; | ||
// 开始滚动 | // 开始滚动 | ||
| 第142行: | 第151行: | ||
} | } | ||
var | var translateX = -(newLeft * containerWidth); | ||
ul.css({ | |||
' | // 重置时先移除 transition,立即跳转,然后恢复 | ||
'transition': ' | if (newLeft === 0) { | ||
ul.css({ | |||
'-webkit-transition': 'none', | |||
'-moz-transition': 'none', | |||
'-o-transition': 'none', | |||
'transition': 'none', | |||
'-webkit-transform': 'translateX(0px)', | |||
'-moz-transform': 'translateX(0px)', | |||
'-ms-transform': 'translateX(0px)', | |||
'-o-transform': 'translateX(0px)', | |||
'transform': 'translateX(0px)' | |||
}); | |||
ul[0].offsetHeight; // 强制重绘 | |||
setTimeout(function() { | |||
ul.css({ | |||
'-webkit-transition': 'transform 0.73s ease-in-out', | |||
'-moz-transition': 'transform 0.73s ease-in-out', | |||
'-o-transition': 'transform 0.73s ease-in-out', | |||
'transition': 'transform 0.73s ease-in-out' | |||
}); | |||
}, 50); | |||
log('设置 transform: translateX(0px)'); | |||
} else { | |||
ul.css({ | |||
'-webkit-transition': 'transform 0.73s ease-in-out', | |||
'-moz-transition': 'transform 0.73s ease-in-out', | |||
'-o-transition': 'transform 0.73s ease-in-out', | |||
'transition': 'transform 0.73s ease-in-out', | |||
'-webkit-transform': 'translateX(' + translateX + 'px)', | |||
'-moz-transform': 'translateX(' + translateX + 'px)', | |||
'-ms-transform': 'translateX(' + translateX + 'px)', | |||
'-o-transform': 'translateX(' + translateX + 'px)', | |||
'transform': 'translateX(' + translateX + 'px)' | |||
}); | |||
log('设置 transform: translateX(' + translateX + 'px)'); | |||
} | |||
dataset.left = newLeft; | dataset.left = newLeft; | ||
}, 5000); | }, 5000); | ||
| 第159行: | 第202行: | ||
if (containerWidth === 0) return; | if (containerWidth === 0) return; | ||
ul.width(containerWidth * lis.length); | ul.css('width', (containerWidth * lis.length) + 'px'); | ||
lis.width | lis.css('width', containerWidth + 'px'); | ||
var currentLeft = parseInt(ul[0].dataset.left) || 0; | var currentLeft = parseInt(ul[0].dataset.left) || 0; | ||
if (currentLeft < 0) currentLeft = 0; | if (currentLeft < 0) currentLeft = 0; | ||
var translateX = -(currentLeft * containerWidth); | |||
ul.css({ | ul.css({ | ||
' | '-webkit-transition': 'transform 0.37s ease-in-out', | ||
'transition': ' | '-moz-transition': 'transform 0.37s ease-in-out', | ||
'-o-transition': 'transform 0.37s ease-in-out', | |||
'transition': 'transform 0.37s ease-in-out', | |||
'-webkit-transform': 'translateX(' + translateX + 'px)', | |||
'-moz-transform': 'translateX(' + translateX + 'px)', | |||
'-ms-transform': 'translateX(' + translateX + 'px)', | |||
'-o-transform': 'translateX(' + translateX + 'px)', | |||
'transform': 'translateX(' + translateX + 'px)' | |||
}); | }); | ||
}); | }); | ||
2025年12月19日 (五) 08:04的版本
// 调试版本的 Mobile.js
// 如果正常版本不工作,可以使用这个版本查看调试信息
(function() {
'use strict';
function log(message) {
if (typeof console !== 'undefined' && console.log) {
console.log('[SiteNotice] ' + message);
}
}
// 初始化用户提示
function initUserPrompt() {
log('开始初始化用户提示');
var siteNoticeScroll = $('#siteNoticeScroll');
log('siteNoticeScroll 元素数量: ' + siteNoticeScroll.length);
if (siteNoticeScroll.length === 0) {
log('未找到 siteNoticeScroll 元素');
return false;
}
var ul = siteNoticeScroll.find('ul:first');
log('ul 元素数量: ' + ul.length);
if (ul.length === 0) {
log('未找到 ul 元素');
return false;
}
var existingLis = ul.find('li');
log('现有 li 元素数量: ' + existingLis.length);
var currentUser = null;
try {
if (typeof mw !== 'undefined' && mw.config && mw.config.get) {
currentUser = mw.config.get('wgUserName');
log('当前用户: ' + (currentUser || '未登录'));
}
} catch (e) {
log('获取用户信息失败: ' + e.message);
}
var promptElement = $('#userPrompt');
log('现有 userPrompt 元素数量: ' + promptElement.length);
// 如果页面没有 userPrompt 元素,创建一个
if (promptElement.length === 0) {
log('创建新的 userPrompt 元素');
promptElement = $('<li id="userPrompt"></li>');
ul.append(promptElement);
log('userPrompt 元素已添加到 DOM');
}
// 设置内容
var content = '';
if (currentUser && currentUser !== null && currentUser !== '') {
content = '<strong>欢迎回来,' + currentUser + '!感谢您对炼石百科的贡献!</strong>';
log('设置已登录用户内容');
} else {
content = '<strong>欢迎加入炼石百科<a href="/wiki/Special:用户登录"><font color="#3862AE">注册一个账号</font></a>,一起参与编写吧!</strong>';
log('设置未登录用户内容');
}
promptElement.html(content);
log('userPrompt 内容已设置');
// 验证元素是否存在
var finalLis = ul.find('li');
log('最终 li 元素数量: ' + finalLis.length);
return true;
}
// 初始化公告滚动
function initSiteNoticeScroll() {
log('开始初始化滚动效果');
var self = $('#siteNoticeScroll');
if (!self.length || !self[0]) {
log('未找到 siteNoticeScroll 元素');
return;
}
var ul = self.find('ul:first');
if (!ul.length) {
log('未找到 ul 元素');
return;
}
var lis = ul.find('li');
log('找到 ' + lis.length + ' 个 li 元素');
if (lis.length <= 1) {
log('li 元素数量不足,不需要滚动');
return;
}
var containerWidth = self.width();
log('容器宽度: ' + containerWidth);
if (containerWidth === 0) {
log('容器宽度为0,延迟重试');
setTimeout(initSiteNoticeScroll, 100);
return;
}
// 设置 ul 和 li 的宽度
ul.css({
'width': (containerWidth * lis.length) + 'px',
'-webkit-transform': 'translateX(0px)',
'-moz-transform': 'translateX(0px)',
'-ms-transform': 'translateX(0px)',
'-o-transform': 'translateX(0px)',
'transform': 'translateX(0px)',
'-webkit-transition': 'transform 0.73s ease-in-out',
'-moz-transition': 'transform 0.73s ease-in-out',
'-o-transition': 'transform 0.73s ease-in-out',
'transition': 'transform 0.73s ease-in-out'
}).attr({
'data-left': 0,
'data-length': lis.length
});
lis.css('width', containerWidth + 'px');
log('设置 ul 宽度: ' + (containerWidth * lis.length) + ', 每个 li 宽度: ' + containerWidth);
// 强制重绘
ul[0].offsetHeight;
// 开始滚动
var scrollInterval = window.setInterval(function() {
var dataset = ul[0].dataset;
if (!dataset) {
log('无法获取 dataset');
return;
}
var currentLeft = parseInt(dataset.left) || 0;
var totalLength = parseInt(dataset.length) || lis.length;
var newLeft = currentLeft + 1;
log('当前索引: ' + currentLeft + ', 总长度: ' + totalLength + ', 新索引: ' + newLeft);
// 如果到达最后一个,重置到第一个(索引0)
if (newLeft >= totalLength) {
newLeft = 0;
log('重置到开始位置');
}
var translateX = -(newLeft * containerWidth);
// 重置时先移除 transition,立即跳转,然后恢复
if (newLeft === 0) {
ul.css({
'-webkit-transition': 'none',
'-moz-transition': 'none',
'-o-transition': 'none',
'transition': 'none',
'-webkit-transform': 'translateX(0px)',
'-moz-transform': 'translateX(0px)',
'-ms-transform': 'translateX(0px)',
'-o-transform': 'translateX(0px)',
'transform': 'translateX(0px)'
});
ul[0].offsetHeight; // 强制重绘
setTimeout(function() {
ul.css({
'-webkit-transition': 'transform 0.73s ease-in-out',
'-moz-transition': 'transform 0.73s ease-in-out',
'-o-transition': 'transform 0.73s ease-in-out',
'transition': 'transform 0.73s ease-in-out'
});
}, 50);
log('设置 transform: translateX(0px)');
} else {
ul.css({
'-webkit-transition': 'transform 0.73s ease-in-out',
'-moz-transition': 'transform 0.73s ease-in-out',
'-o-transition': 'transform 0.73s ease-in-out',
'transition': 'transform 0.73s ease-in-out',
'-webkit-transform': 'translateX(' + translateX + 'px)',
'-moz-transform': 'translateX(' + translateX + 'px)',
'-ms-transform': 'translateX(' + translateX + 'px)',
'-o-transform': 'translateX(' + translateX + 'px)',
'transform': 'translateX(' + translateX + 'px)'
});
log('设置 transform: translateX(' + translateX + 'px)');
}
dataset.left = newLeft;
}, 5000);
log('滚动定时器已启动,间隔: 5000ms');
// 窗口大小改变时重新计算
$(window).on('resize', function() {
log('窗口大小改变');
containerWidth = self.width();
if (containerWidth === 0) return;
ul.css('width', (containerWidth * lis.length) + 'px');
lis.css('width', containerWidth + 'px');
var currentLeft = parseInt(ul[0].dataset.left) || 0;
if (currentLeft < 0) currentLeft = 0;
var translateX = -(currentLeft * containerWidth);
ul.css({
'-webkit-transition': 'transform 0.37s ease-in-out',
'-moz-transition': 'transform 0.37s ease-in-out',
'-o-transition': 'transform 0.37s ease-in-out',
'transition': 'transform 0.37s ease-in-out',
'-webkit-transform': 'translateX(' + translateX + 'px)',
'-moz-transform': 'translateX(' + translateX + 'px)',
'-ms-transform': 'translateX(' + translateX + 'px)',
'-o-transform': 'translateX(' + translateX + 'px)',
'transform': 'translateX(' + translateX + 'px)'
});
});
// 保存 interval ID
self.data('scrollInterval', scrollInterval);
}
// 等待 DOM 和 MediaWiki 加载完成
function init() {
log('开始初始化');
log('jQuery 版本: ' + (typeof $ !== 'undefined' ? $.fn.jquery : '未加载'));
log('MediaWiki 版本: ' + (typeof mw !== 'undefined' ? '已加载' : '未加载'));
// 先初始化用户提示(必须在滚动初始化之前)
var promptAdded = initUserPrompt();
log('用户提示初始化结果: ' + promptAdded);
// 延迟初始化滚动效果,确保 DOM 完全更新
setTimeout(function() {
initSiteNoticeScroll();
}, promptAdded ? 100 : 0);
}
// 多种初始化方式
if (typeof $ !== 'undefined') {
log('jQuery 已加载,使用 jQuery ready');
$(document).ready(function() {
log('jQuery ready 触发');
init();
});
if (document.readyState === 'complete' || document.readyState === 'interactive') {
log('文档已加载,立即执行');
setTimeout(init, 100);
}
} else {
log('jQuery 未加载,等待加载');
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
log('DOMContentLoaded 触发');
if (typeof $ !== 'undefined') {
setTimeout(init, 100);
}
});
} else {
var checkJQuery = setInterval(function() {
if (typeof $ !== 'undefined') {
log('jQuery 已加载');
clearInterval(checkJQuery);
init();
}
}, 100);
setTimeout(function() {
clearInterval(checkJQuery);
}, 10000);
}
}
// 使用 MediaWiki 的 hook
if (typeof mw !== 'undefined' && mw.hook) {
log('注册 mobile.init hook');
mw.hook('mobile.init').add(function() {
log('mobile.init hook 触发');
setTimeout(init, 200);
});
}
log('脚本加载完成');
})();