-
汇聚密码安全智慧 共享实战经验!
我们目前有643个页面,13个用户,731次编辑。
查看“MediaWiki:Mobile.js”的源代码
←
MediaWiki:Mobile.js
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。 如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
// 移动端公告滚动效果 - 修复版本 // 使用 transform 实现滚动,确保在移动端正常工作 (function() { 'use strict'; // 防止重复初始化 var initialized = false; var scrollInterval = null; // 初始化公告滚动 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() || self[0].offsetWidth || self[0].clientWidth; if (containerWidth === 0) { // 如果宽度为0,延迟重试 setTimeout(initSiteNoticeScroll, 100); return; } // 设置 ul 宽度和初始 transform var totalWidth = containerWidth * lis.length; ul.css({ 'width': totalWidth + 'px', 'height': '25px', 'margin': '0', 'padding': '0', 'list-style': 'none', 'display': 'block', 'position': 'relative', 'white-space': 'nowrap', '-webkit-transform': 'translate3d(0, 0, 0)', '-moz-transform': 'translate3d(0, 0, 0)', '-ms-transform': 'translate3d(0, 0, 0)', '-o-transform': 'translate3d(0, 0, 0)', 'transform': 'translate3d(0, 0, 0)', '-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', 'will-change': 'transform' }).attr({ 'data-left': 0, 'data-length': lis.length }); // 设置每个 li 的宽度 lis.css({ 'width': containerWidth + 'px', 'height': '25px', 'line-height': '25px', 'list-style': 'none', 'float': 'left', 'display': 'inline-block', 'box-sizing': 'border-box', 'padding': '0 10px', 'vertical-align': 'top', 'flex-shrink': '0' }); // 强制重绘 ul[0].offsetHeight; // 清除之前的定时器 if (scrollInterval) { clearInterval(scrollInterval); } // 开始滚动 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; } var translateX = -(newLeft * containerWidth); // 重置时先移除 transition,立即跳转,然后恢复 if (newLeft === 0) { // 先移除 transition,立即跳转 ul.css({ '-webkit-transition': 'none', '-moz-transition': 'none', '-o-transition': 'none', 'transition': 'none', '-webkit-transform': 'translate3d(0, 0, 0)', '-moz-transform': 'translate3d(0, 0, 0)', '-ms-transform': 'translate3d(0, 0, 0)', '-o-transform': 'translate3d(0, 0, 0)', 'transform': 'translate3d(0, 0, 0)' }); // 强制重绘 ul[0].offsetHeight; // 恢复 transition 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); } 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': 'translate3d(' + translateX + 'px, 0, 0)', '-moz-transform': 'translate3d(' + translateX + 'px, 0, 0)', '-ms-transform': 'translateX(' + translateX + 'px)', '-o-transform': 'translate3d(' + translateX + 'px, 0, 0)', 'transform': 'translate3d(' + translateX + 'px, 0, 0)' }); } dataset.left = newLeft; }, 5000); // 窗口大小改变时重新计算 $(window).on('resize.siteNoticeScroll', function() { containerWidth = self.width() || self[0].offsetWidth || self[0].clientWidth; if (containerWidth === 0) return; var totalWidth = containerWidth * lis.length; ul.css('width', totalWidth + '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-transform': 'translate3d(' + translateX + 'px, 0, 0)', '-moz-transform': 'translate3d(' + translateX + 'px, 0, 0)', '-ms-transform': 'translateX(' + translateX + 'px)', '-o-transform': 'translate3d(' + translateX + 'px, 0, 0)', 'transform': 'translate3d(' + translateX + 'px, 0, 0)', '-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' }); }); // 保存 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() { if (initialized) { return; // 防止重复初始化 } initialized = true; // 先初始化用户提示(必须在滚动初始化之前) var promptAdded = initUserPrompt(); // 延迟初始化滚动效果,确保 DOM 完全更新 setTimeout(function() { initSiteNoticeScroll(); }, promptAdded ? 200 : 100); } // 多种初始化方式,确保在移动端和桌面端都能工作 if (typeof $ !== 'undefined') { // jQuery 已加载 $(document).ready(function() { init(); }); // 如果已经在 ready 状态,延迟执行(避免重复) if (document.readyState === 'complete' || document.readyState === 'interactive') { setTimeout(function() { if (!initialized) { init(); } }, 300); } } else { // 等待 jQuery 加载 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { if (typeof $ !== 'undefined' && !initialized) { setTimeout(init, 200); } }); } else { // 如果 DOM 已加载,等待 jQuery var checkJQuery = setInterval(function() { if (typeof $ !== 'undefined' && !initialized) { clearInterval(checkJQuery); init(); } }, 100); // 10秒后停止检查 setTimeout(function() { clearInterval(checkJQuery); }, 10000); } } // 使用 MediaWiki 的 hook(如果可用) if (typeof mw !== 'undefined' && mw.hook) { mw.hook('mobile.init').add(function() { if (!initialized) { setTimeout(init, 300); } }); } })();
返回
MediaWiki:Mobile.js
。
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
系统消息
讨论
English
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
问问小炼
工具
链入页面
相关更改
特殊页面
页面信息
分享
微信扫码分享