MediaWiki:Common.js:修订间差异
来自Age Of History 2 Chinese Wiki
无编辑摘要 |
无编辑摘要 标签:手工回退 |
||
(未显示同一用户的5个中间版本) | |||
第1行: | 第1行: | ||
/* | /* 轮播图功能 */ | ||
mw.hook('wikipage.content').add(function($content) { | mw.hook('wikipage.content').add(function($content) { | ||
// 查找页面中所有轮播图 | // 查找页面中所有轮播图 | ||
第124行: | 第122行: | ||
$(function() { | $(function() { | ||
// 创建CRT效果容器 | // 创建CRT效果容器 | ||
function createCRTEffects() { | |||
if ($('.crt-effects').length === 0) { | |||
var crtContainer = $('<div>', { | |||
'class': 'crt-effects', | |||
html: [ | |||
$('<div>', {'class': 'scan-line-effect'}), | |||
$('<div>', {'class': 'scan-animation'}).append( | |||
$('<div>', {'class': 'fast-scan'}) | |||
), | |||
$('<div>', {'class': 'radial-glow'}) | |||
] | |||
}); | |||
$('body').append(crtContainer); | |||
} | } | ||
} | |||
// 初始化CRT效果 | // 初始化CRT效果 | ||
第299行: | 第298行: | ||
// 修复导航栏 | // 修复导航栏 | ||
$('.navbar').css({ | $('.navbar').css({ | ||
'background-color': 'rgb( | 'background-color': 'rgb(10, 10, 10)', | ||
'border-bottom': '1px solid rgb( | 'border-bottom': '1px solid rgb(229, 140, 36)' | ||
}); | }); | ||
// 修复下拉菜单 | // 修复下拉菜单 | ||
$('.dropdown-menu').css({ | $('.dropdown-menu').css({ | ||
'background-color': 'rgb( | 'background-color': 'rgb(10, 10, 10)', | ||
'border': '1px solid rgb( | 'border': '1px solid rgb(229, 140, 36)' | ||
}); | }); | ||
// 修复按钮 | // 修复按钮 | ||
$('.btn').css({ | $('.btn').css({ | ||
'background-color': 'rgb( | 'background-color': 'rgb(72, 69, 60)', | ||
'border': '1px solid rgb( | 'border': '1px solid rgb(229, 140, 36)', | ||
'color': 'rgb( | 'color': 'rgb(229, 140, 36)' | ||
}); | }); | ||
// 修复表单控件 | // 修复表单控件 | ||
$('.form-control').css({ | $('.form-control').css({ | ||
'background-color': ' | 'background-color': 'rgb(10, 10, 10)', | ||
'border': '1px solid rgb( | 'border': '1px solid rgb(229, 140, 36)', | ||
'color': 'rgb( | 'color': 'rgb(229, 140, 36)' | ||
}); | }); | ||
} | } | ||
第337行: | 第336行: | ||
}); | }); | ||
}); | }); | ||
// 顶栏头像显示 | |||
// | // 增强的头像显示 | ||
$(document).ready(function() { | $(document).ready(function() { | ||
var username = mw.config.get('wgUserName'); | var username = mw.config.get('wgUserName'); | ||
if (username) { | if (username) { | ||
// 获取用户ID,是生成头像URL的关键 | |||
$.get(mw.util.wikiScript('api'), { | $.get(mw.util.wikiScript('api'), { | ||
action: 'query', | action: 'query', | ||
list: 'users', | list: 'users', | ||
ususers: username, | ususers: username, | ||
format: 'json' | format: 'json' | ||
}).done(function(data) { | }).done(function(data) { | ||
第352行: | 第351行: | ||
var userId = data.query.users[0].userid; | var userId = data.query.users[0].userid; | ||
// | // 尝试几种可能的头像路径格式 | ||
var possiblePaths = [ | var possiblePaths = [ | ||
'/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.jpg', | |||
'/ | '/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.png', | ||
'/ | '/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.gif', | ||
'/ | '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.jpg', | ||
'/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + ' | '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.png', | ||
// | '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.gif' | ||
'/ | |||
]; | ]; | ||
// 检查哪个路径可用 | |||
function checkPath(index) { | function checkPath(index) { | ||
if (index >= possiblePaths.length) { | if (index >= possiblePaths.length) { | ||
// | // 所有路径都不可用,使用默认头像 | ||
applyAvatarCSS('/extensions/SocialProfile/ | applyAvatarCSS('/extensions/SocialProfile/images/default_s.gif'); | ||
return; | return; | ||
} | } | ||
第376行: | 第371行: | ||
var img = new Image(); | var img = new Image(); | ||
img.onload = function() { | img.onload = function() { | ||
applyAvatarCSS( | // 找到可用的路径 | ||
applyAvatarCSS(possiblePaths[index]); | |||
}; | }; | ||
img.onerror = function() { | img.onerror = function() { | ||
// 尝试下一个路径 | |||
checkPath(index + 1); | checkPath(index + 1); | ||
}; | }; | ||
第390行: | 第387行: | ||
function applyAvatarCSS(avatarUrl) { | function applyAvatarCSS(avatarUrl) { | ||
// 应用CSS规则 | |||
$('<style>').text( | $('<style>').text( | ||
' | '.navbar-userloggedin::before, ' + | ||
' | '#personal-inner::before, ' + | ||
'#p-personal | '#p-personal .vector-menu-content-list > li:first-child > a::before, ' + | ||
' | '.navbar-personaltools > li:first-child > a::before {' + | ||
' background-image: url("' + avatarUrl + '") !important;' + | ' background-image: url("' + avatarUrl + '") !important;' + | ||
'}' | '}' | ||
第400行: | 第398行: | ||
} | } | ||
}); | }); | ||
/* Windows | /* Windows XP 风格的开始菜单和时钟功能 */ | ||
// 创建完整的任务栏 | // 创建完整的任务栏 | ||
function createTaskbar() { | function createTaskbar() { | ||
// 移除之前的任务栏 | |||
$('.taskbar, .start-button, .taskbar-clock').remove(); | |||
// 创建任务栏容器 | // 创建任务栏容器 | ||
var $taskbar = $('<div class="taskbar"></div>'); | var $taskbar = $('<div class="taskbar"></div>'); | ||
第477行: | 第444行: | ||
$systemTray.append($networkIcon); | $systemTray.append($networkIcon); | ||
// | // 添加时钟 | ||
var $clock = $('<div class="taskbar-clock"></div>'); | var $clock = $('<div class="taskbar-clock"></div>'); | ||
$systemTray.append($clock); | $systemTray.append($clock); | ||
第508行: | 第475行: | ||
} | } | ||
// | // 设置开始菜单 | ||
function setupStartMenu() { | function setupStartMenu() { | ||
// 移除任何现有的开始菜单 | // 移除任何现有的开始菜单 | ||
第678行: | 第575行: | ||
}); | }); | ||
} | } | ||
// Windows XP 风格的任务栏和开始菜单样式 | |||
function addTaskbarStyles() { | |||
var taskbarStyles = ` | |||
/* 任务栏样式 */ | |||
.taskbar { | |||
position: fixed; | |||
bottom: 0; | |||
left: 0; | |||
right: 0; | |||
height: 40px; | |||
background-color: #0054e3; | |||
background: linear-gradient(to bottom, #2e96ef, #2387e7 50%, #0272d4 50%, #0866c6); | |||
border-top: 1px solid #2483ce; | |||
display: flex; | |||
align-items: center; | |||
z-index: 9999; | |||
padding: 0 5px; | |||
} | |||
/* 开始按钮样式 */ | |||
.start-button { | |||
height: 34px; | |||
padding: 0 10px; | |||
display: flex; | |||
align-items: center; | |||
background: linear-gradient(to bottom, #3c8ddd, #2987d6 50%, #1a6fc9 50%, #155db9); | |||
border: 1px solid #10559a; | |||
border-radius: 3px; | |||
color: white; | |||
font-weight: bold; | |||
margin-right: 10px; | |||
cursor: pointer; | |||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); | |||
} | |||
.start-button:hover { | |||
background: linear-gradient(to bottom, #5ca6e5, #4a9add 50%, #3b88d5 50%, #2a76c4); | |||
} | |||
/* 任务栏内容区域 */ | |||
.taskbar-content { | |||
flex-grow: 1; | |||
display: flex; | |||
height: 100%; | |||
align-items: center; | |||
} | |||
/* 快速启动栏 */ | |||
.quick-launch { | |||
display: flex; | |||
align-items: center; | |||
height: 100%; | |||
} | |||
.quick-launch-icon { | |||
width: 30px; | |||
height: 30px; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
margin-right: 5px; | |||
cursor: pointer; | |||
font-size: 18px; | |||
background-color: rgba(255, 255, 255, 0.2); | |||
border-radius: 3px; | |||
} | |||
.quick-launch-icon:hover { | |||
background-color: rgba(255, 255, 255, 0.3); | |||
} | |||
/* 系统托盘 */ | |||
.system-tray { | |||
display: flex; | |||
align-items: center; | |||
height: 100%; | |||
padding: 0 5px; | |||
} | |||
.tray-icon { | |||
margin-left: 8px; | |||
font-size: 16px; | |||
cursor: pointer; | |||
} | |||
/* 时钟样式 */ | |||
.taskbar-clock { | |||
background-color: rgba(0, 0, 0, 0.2); | |||
color: white; | |||
padding: 3px 8px; | |||
margin-left: 8px; | |||
border-radius: 3px; | |||
font-size: 12px; | |||
} | |||
/* 开始菜单样式已在setupStartMenu函数中通过JS设置 */ | |||
`; | |||
// 添加样式到head | |||
$('style[data-taskbar-styles]').remove(); | |||
$('<style data-taskbar-styles>').text(taskbarStyles).appendTo('head'); | |||
} | |||
// 初始化函数 | |||
function initWindowsXPElements() { | |||
// 添加样式 | |||
addTaskbarStyles(); | |||
// 创建任务栏 | |||
createTaskbar(); | |||
// 设置开始菜单 | |||
setupStartMenu(); | |||
} | |||
// 页面加载完成后初始化 | |||
$(document).ready(function() { | |||
initWindowsXPElements(); | |||
}); |
2025年5月10日 (六) 20:45的最新版本
/* 轮播图功能 */ mw.hook('wikipage.content').add(function($content) { // 查找页面中所有轮播图 $content.find('.mw-carousel').each(function() { const $carousel = $(this); const $items = $carousel.find('.carousel-item'); const $indicators = $carousel.find('.carousel-indicators'); const $prevBtn = $carousel.find('.carousel-prev'); const $nextBtn = $carousel.find('.carousel-next'); let currentIndex = 0; const slideCount = $items.length; if (slideCount === 0) return; // 创建指示器 for (let i = 0; i < slideCount; i++) { const $indicator = $('<div class="indicator"></div>'); if (i === 0) $indicator.addClass('active'); $indicator.on('click', function() { goToSlide(i); }); $indicators.append($indicator); } // 初始化第一张幻灯片 $items.eq(0).addClass('active'); // 给每个幻灯片添加点击事件 $items.each(function() { const $item = $(this); const link = $item.data('link'); if (link && link.length > 0) { $item.css('cursor', 'pointer').on('click', function() { window.location.href = link; }); } }); // 切换到指定幻灯片 function goToSlide(index) { $items.removeClass('active'); $indicators.find('.indicator').removeClass('active'); $items.eq(index).addClass('active'); $indicators.find('.indicator').eq(index).addClass('active'); currentIndex = index; } // 上一张 function prevSlide() { const newIndex = (currentIndex - 1 + slideCount) % slideCount; goToSlide(newIndex); } // 下一张 function nextSlide() { const newIndex = (currentIndex + 1) % slideCount; goToSlide(newIndex); } // 绑定按钮事件 $prevBtn.on('click', function(e) { e.preventDefault(); e.stopPropagation(); prevSlide(); }); $nextBtn.on('click', function(e) { e.preventDefault(); e.stopPropagation(); nextSlide(); }); // 自动播放 let autoplayInterval = setInterval(nextSlide, 5000); $carousel.on('mouseenter', function() { clearInterval(autoplayInterval); }).on('mouseleave', function() { autoplayInterval = setInterval(nextSlide, 5000); }); // 触摸滑动支持 let touchStartX = 0; let touchEndX = 0; $carousel.on('touchstart', function(e) { touchStartX = e.originalEvent.touches[0].clientX; }); $carousel.on('touchend', function(e) { touchEndX = e.originalEvent.changedTouches[0].clientX; // 判断滑动方向 if (touchEndX < touchStartX - 50) { nextSlide(); // 左滑,下一张 } else if (touchEndX > touchStartX + 50) { prevSlide(); // 右滑,上一张 } }); }); }); // Collapsible blocks functionality $(document).ready(function() { // Initialize collapsible blocks $('.collapsible-header').click(function() { $(this).next('.collapsible-content').slideToggle(); $(this).toggleClass('active'); }); // Initially hide collapsible content $('.collapsible-content').hide(); }); /* Common.js - Database New主题JavaScript增强 */ $(function() { // 创建CRT效果容器 function createCRTEffects() { if ($('.crt-effects').length === 0) { var crtContainer = $('<div>', { 'class': 'crt-effects', html: [ $('<div>', {'class': 'scan-line-effect'}), $('<div>', {'class': 'scan-animation'}).append( $('<div>', {'class': 'fast-scan'}) ), $('<div>', {'class': 'radial-glow'}) ] }); $('body').append(crtContainer); } } // 初始化CRT效果 createCRTEffects(); // 橙幕切换功能 if (typeof window.orangemu_toggle_init === 'undefined') { window.orangemu_toggle_init = true; // 为橙幕添加点击切换功能 $(document).on('click', '.orangemu', function(e) { e.stopPropagation(); $(this).toggleClass('orangemu_toggle_on'); }); } // 修复动画问题 function fixAnimations() { // 延迟应用动画,防止页面加载时的闪烁 setTimeout(function() { $('#mw-content-text > *').each(function(index) { $(this).css({ 'animation': 'fadeIn 0.5s ease-out forwards', 'animation-delay': (index * 0.1) + 's', 'opacity': '0' }); }); }, 100); } // 应用动画修复 $(document).ready(function() { fixAnimations(); }); // 监听新内容加载(如AJAX) mw.hook('wikipage.content').add(function($content) { if ($content.attr('id') === 'mw-content-text') { fixAnimations(); } }); // 添加复古终端效果的打字动画 function typeWriter(element, text, speed) { var i = 0; element.empty(); function type() { if (i < text.length) { element.append(text.charAt(i)); i++; setTimeout(type, speed); } } type(); } // 为特定元素应用打字效果 $('.terminal-text').each(function() { var text = $(this).text(); typeWriter($(this), text, 50); }); // 添加闪烁光标效果 function createBlinkingCursor() { var cursor = $('<span>', { 'class': 'terminal-cursor', text: '▋' }); setInterval(function() { cursor.toggle(); }, 500); return cursor; } // 为终端元素添加光标 $('.terminal').each(function() { $(this).append(createBlinkingCursor()); }); // 模拟CRT屏幕抖动效果 function screenGlitch() { var container = $('#content'); container.css('transform', 'translate(' + (Math.random() * 2 - 1) + 'px, ' + (Math.random() * 2 - 1) + 'px)'); setTimeout(function() { container.css('transform', 'translate(0, 0)'); }, 50); } // 随机触发屏幕抖动 setInterval(function() { if (Math.random() < 0.005) { // 0.5%的概率 screenGlitch(); } }, 1000); // 为页面添加启动动画 function bootSequence() { $('body').addClass('booting'); setTimeout(function() { $('body').removeClass('booting').addClass('booted'); }, 500); } // 页面加载时执行启动序列 bootSequence(); }); // 辅助CSS类 $(function() { // 动态添加一些必要的CSS var customStyles = ` .terminal-cursor { animation: blink 1s infinite; } @keyframes blink { 0% { opacity: 1; } 50% { opacity: 0; } 100% { opacity: 1; } } .booting #content { opacity: 0; transform: scale(0.95); transition: all 0.5s ease-out; } .booted #content { opacity: 1; transform: scale(1); } .terminal { font-family: var(--mono-font); background-color: rgb(var(--black-monochrome)); color: rgb(var(--bright-accent)); padding: 1rem; border: 2px solid rgb(var(--bright-accent)); box-shadow: 0 0 10px rgba(var(--bright-accent), 0.3); } /* 修复动画闪烁问题 */ #mw-content-text > * { visibility: visible; } .mw-parser-output > *.animated { animation: none !important; } `; $('<style>').text(customStyles).appendTo('head'); }); // 修复变色龙皮肤的Bootstrap组件 $(function() { function fixBootstrapComponents() { // 修复导航栏 $('.navbar').css({ 'background-color': 'rgb(10, 10, 10)', 'border-bottom': '1px solid rgb(229, 140, 36)' }); // 修复下拉菜单 $('.dropdown-menu').css({ 'background-color': 'rgb(10, 10, 10)', 'border': '1px solid rgb(229, 140, 36)' }); // 修复按钮 $('.btn').css({ 'background-color': 'rgb(72, 69, 60)', 'border': '1px solid rgb(229, 140, 36)', 'color': 'rgb(229, 140, 36)' }); // 修复表单控件 $('.form-control').css({ 'background-color': 'rgb(10, 10, 10)', 'border': '1px solid rgb(229, 140, 36)', 'color': 'rgb(229, 140, 36)' }); } // 应用样式修复 fixBootstrapComponents(); // 监听DOM变化 var observer = new MutationObserver(function(mutations) { fixBootstrapComponents(); }); observer.observe(document.body, { childList: true, subtree: true }); }); // 顶栏头像显示 // 增强的头像显示 $(document).ready(function() { var username = mw.config.get('wgUserName'); if (username) { // 获取用户ID,是生成头像URL的关键 $.get(mw.util.wikiScript('api'), { action: 'query', list: 'users', ususers: username, format: 'json' }).done(function(data) { if (data && data.query && data.query.users && data.query.users[0]) { var userId = data.query.users[0].userid; // 尝试几种可能的头像路径格式 var possiblePaths = [ '/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.jpg', '/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.png', '/images/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.gif', '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.jpg', '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.png', '/extensions/SocialProfile/avatars/' + mw.config.get('wgDBname') + '_' + userId + '_s.gif' ]; // 检查哪个路径可用 function checkPath(index) { if (index >= possiblePaths.length) { // 所有路径都不可用,使用默认头像 applyAvatarCSS('/extensions/SocialProfile/images/default_s.gif'); return; } var img = new Image(); img.onload = function() { // 找到可用的路径 applyAvatarCSS(possiblePaths[index]); }; img.onerror = function() { // 尝试下一个路径 checkPath(index + 1); }; img.src = mw.config.get('wgScriptPath') + possiblePaths[index]; } checkPath(0); } }); } function applyAvatarCSS(avatarUrl) { // 应用CSS规则 $('<style>').text( '.navbar-userloggedin::before, ' + '#personal-inner::before, ' + '#p-personal .vector-menu-content-list > li:first-child > a::before, ' + '.navbar-personaltools > li:first-child > a::before {' + ' background-image: url("' + avatarUrl + '") !important;' + '}' ).appendTo('head'); } }); /* Windows XP 风格的开始菜单和时钟功能 */ // 创建完整的任务栏 function createTaskbar() { // 移除之前的任务栏 $('.taskbar, .start-button, .taskbar-clock').remove(); // 创建任务栏容器 var $taskbar = $('<div class="taskbar"></div>'); // 创建开始按钮 var $startButton = $('<div class="start-button">开始</div>'); $taskbar.append($startButton); // 创建任务栏内容区域 var $taskbarContent = $('<div class="taskbar-content"></div>'); // 创建快速启动栏 var $quickLaunch = $('<div class="quick-launch"></div>'); // 添加一些快速启动图标 var quickLaunchItems = [ { icon: '🌐', title: '浏览器', action: function() { window.location.href = '/wiki/首页'; } }, { icon: '📁', title: '文件夹', action: function() { window.location.href = '/wiki/Special:AllPages'; } }, { icon: '📧', title: '邮件', action: function() { window.location.href = '/wiki/Special:EmailUser'; } } ]; quickLaunchItems.forEach(function(item) { var $icon = $('<div class="quick-launch-icon" title="' + item.title + '">' + item.icon + '</div>'); $icon.click(item.action); $quickLaunch.append($icon); }); $taskbarContent.append($quickLaunch); $taskbar.append($taskbarContent); // 创建系统托盘 var $systemTray = $('<div class="system-tray"></div>'); // 添加系统图标 var $volumeIcon = $('<div class="tray-icon" title="音量">🔊</div>'); var $networkIcon = $('<div class="tray-icon" title="网络">📶</div>'); $systemTray.append($volumeIcon); $systemTray.append($networkIcon); // 添加时钟 var $clock = $('<div class="taskbar-clock"></div>'); $systemTray.append($clock); $taskbar.append($systemTray); // 添加到页面 $('body').append($taskbar); // 启动时钟 updateClock($clock); } // 更新时钟 function updateClock($clock) { function update() { var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes(); // 格式化时间 hours = (hours < 10 ? '0' : '') + hours; minutes = (minutes < 10 ? '0' : '') + minutes; $clock.text(hours + ':' + minutes); } update(); setInterval(update, 1000); } // 设置开始菜单 function setupStartMenu() { // 移除任何现有的开始菜单 $('#xp-start-menu').remove(); // 创建开始菜单元素 var $startMenu = $('<div id="xp-start-menu"></div>').css({ 'position': 'fixed', 'left': '0', 'bottom': '60px', 'width': '250px', 'background-color': 'white', 'border': '2px solid #0054e3', 'box-shadow': '2px -2px 5px rgba(0, 0, 0, 0.3)', 'z-index': '10000', 'display': 'none' }); // 添加菜单顶部 var username = mw.config.get('wgUserName') || 'Guest'; var $menuTop = $('<div class="start-menu-top"></div>').css({ 'height': '60px', 'background': 'linear-gradient(to bottom, #235ddc, #225ada 50%, #214fbb)', 'color': 'white', 'padding': '10px', 'font-weight': 'bold', 'display': 'flex', 'align-items': 'center' }); $menuTop.html('<span style="font-size: 16px;">' + username + '</span>'); $startMenu.append($menuTop); // 添加菜单项 var $menuItems = $('<div class="start-menu-items"></div>').css({ 'background-color': 'white', 'padding': '5px 0' }); // 定义菜单项 var menuItemsData = [ { icon: '📄', text: '我的文档', link: '/wiki/Special:MyPage' }, { icon: '🖼️', text: '我的图片', link: '/wiki/Special:MediaStatistics' }, { icon: '🎵', text: '我的音乐', link: '#' }, { icon: '⚙️', text: '控制面板', link: '/wiki/Special:Preferences' }, { icon: '🔍', text: '搜索', link: '/wiki/Special:Search' }, { icon: '❓', text: '帮助和支持', link: '/wiki/Help:目录' }, { icon: '🚪', text: '注销', link: '/wiki/Special:UserLogout' } ]; // 添加菜单项 $.each(menuItemsData, function(index, item) { var $menuItem = $('<div class="start-menu-item"></div>').css({ 'padding': '5px 10px', 'display': 'flex', 'align-items': 'center', 'cursor': 'pointer' }); $menuItem.html('<span style="margin-right: 10px; font-size: 16px;">' + item.icon + '</span>' + '<span>' + item.text + '</span>'); // 添加悬停效果 $menuItem.hover( function() { $(this).css('background-color', '#e0ecff'); }, function() { $(this).css('background-color', 'transparent'); } ); // 添加链接功能 $menuItem.click(function() { if (item.link && item.link !== '#') { window.location.href = mw.config.get('wgScriptPath') + item.link; } }); $menuItems.append($menuItem); }); $startMenu.append($menuItems); // 添加开始菜单到body $('body').append($startMenu); // 为开始按钮添加点击事件 $(document).on('click', '.start-button', function(e) { e.stopPropagation(); $startMenu.toggle(); }); // 点击其他区域关闭开始菜单 $(document).click(function(e) { if (!$(e.target).is('.start-button') && !$(e.target).closest('#xp-start-menu').length) { $startMenu.hide(); } }); } // Windows XP 风格的任务栏和开始菜单样式 function addTaskbarStyles() { var taskbarStyles = ` /* 任务栏样式 */ .taskbar { position: fixed; bottom: 0; left: 0; right: 0; height: 40px; background-color: #0054e3; background: linear-gradient(to bottom, #2e96ef, #2387e7 50%, #0272d4 50%, #0866c6); border-top: 1px solid #2483ce; display: flex; align-items: center; z-index: 9999; padding: 0 5px; } /* 开始按钮样式 */ .start-button { height: 34px; padding: 0 10px; display: flex; align-items: center; background: linear-gradient(to bottom, #3c8ddd, #2987d6 50%, #1a6fc9 50%, #155db9); border: 1px solid #10559a; border-radius: 3px; color: white; font-weight: bold; margin-right: 10px; cursor: pointer; text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); } .start-button:hover { background: linear-gradient(to bottom, #5ca6e5, #4a9add 50%, #3b88d5 50%, #2a76c4); } /* 任务栏内容区域 */ .taskbar-content { flex-grow: 1; display: flex; height: 100%; align-items: center; } /* 快速启动栏 */ .quick-launch { display: flex; align-items: center; height: 100%; } .quick-launch-icon { width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; margin-right: 5px; cursor: pointer; font-size: 18px; background-color: rgba(255, 255, 255, 0.2); border-radius: 3px; } .quick-launch-icon:hover { background-color: rgba(255, 255, 255, 0.3); } /* 系统托盘 */ .system-tray { display: flex; align-items: center; height: 100%; padding: 0 5px; } .tray-icon { margin-left: 8px; font-size: 16px; cursor: pointer; } /* 时钟样式 */ .taskbar-clock { background-color: rgba(0, 0, 0, 0.2); color: white; padding: 3px 8px; margin-left: 8px; border-radius: 3px; font-size: 12px; } /* 开始菜单样式已在setupStartMenu函数中通过JS设置 */ `; // 添加样式到head $('style[data-taskbar-styles]').remove(); $('<style data-taskbar-styles>').text(taskbarStyles).appendTo('head'); } // 初始化函数 function initWindowsXPElements() { // 添加样式 addTaskbarStyles(); // 创建任务栏 createTaskbar(); // 设置开始菜单 setupStartMenu(); } // 页面加载完成后初始化 $(document).ready(function() { initWindowsXPElements(); });