Help
RSS
API
Feed
Maltego
Contact
Domain > centurystudio.top
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-08-31
149.104.21.3
(
ClassC
)
2025-10-21
172.67.157.160
(
ClassC
)
Port 443
HTTP/1.1 200 OKDate: Tue, 21 Oct 2025 10:34:08 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-aliveServer: cloudflareReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?sj7jY7maLmq%2FxL%2BQeFjTDfjXayxRf23hfqSPAYxeiYW2Fdq%2BQIpwIcZZ2A%2F%2BOW7D8iiNDbVD8BBNWYAzltH5EB8rQFipXIWRWoU6UQn6TK7FE}}Last-Modified: Sun, 19 Oct 2025 20:52:42 GMTX-Cache: MISS from Starxn for AFQAQcf-cache-status: DYNAMICvary: accept-encodingNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Strict-Transport-Security: max-age0; preloadSpeculation-Rules: /cdn-cgi/speculationCF-RAY: 992019c6ae4f1509-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langzh-CN>head> script charsetUTF-8 idLA_COLLECT src//sdk.51.la/js-sdk-pro.min.js>/script> script>LA.init({id:3NmrjEe7470XHy8D,ck:3NmrjEe7470XHy8D,autoTrack:true})/script> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> link relicon typeimage/png hreffavicon.png> title>世纪工作室 - 移动版/title> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css> link hrefhttps://fonts.googleapis.com/css2?familyMa+Shan+Zheng&familyZCOOL+QingKe+HuangYou&displayswap relstylesheet> style> /* 基础样式 */ * { margin: 0; padding: 0; box-sizing: border-box; font-family: Segoe UI, Tahoma, Geneva, Verdana, sans-serif; -webkit-tap-highlight-color: transparent; } :root { --primary: #0a0a1a; --secondary: #1a1a2e; --accent: #ff3333; --light: #f0f0f5; --gold: #ffd700; } body { background: linear-gradient(135deg, var(--primary), var(--secondary)); color: var(--light); overflow-x: hidden; } /* 导航栏样式 */ .main-nav { position: fixed; top: 15px; left: 50%; transform: translateX(-50%); display: flex; justify-content: center; align-items: center; gap: 30px; z-index: 300; padding: 8px 20px; border-radius: 40px; background: rgba(10, 10, 26, 0.9); backdrop-filter: blur(10px); border: 1px solid rgba(106, 103, 206, 0.3); width: auto; max-width: 90%; transition: all 0.3s ease; } .main-nav.hidden { opacity: 0; visibility: hidden; transform: translate(-50%, -20px); pointer-events: none; } .nav-item { color: white; font-size: 1rem; cursor: pointer; transition: all 0.3s ease; padding: 6px 15px; border-radius: 25px; white-space: nowrap; } .nav-item.active { color: var(--gold); font-size: 1.2rem; font-weight: bold; background: rgba(255, 215, 0, 0.1); } .nav-item:active:not(.active) { color: #6a67ce; transform: translateY(-2px); } /* 滑动容器样式 */ .swipe-container { position: relative; width: 100%; height: calc(100vh - 80px); overflow: hidden; margin-top: 70px; touch-action: pan-y; } .swipe-wrapper { display: flex; width: 300%; height: 100%; transition: transform 0.3s ease; transform: translateX(-33.33%); } .swipe-page { width: 100vw; height: 100%; flex-shrink: 0; transition: opacity 0.3s ease; } .swipe-page:not(.active) { opacity: 0; pointer-events: none; } .swipe-page.active { opacity: 1; pointer-events: auto; } /* 元旦倒计时页面样式 */ .new-year-page { min-height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 20px; position: relative; overflow: hidden; } /* 节日背景 */ .festival-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(circle at 20% 30%, rgba(255, 51, 51, 0.2) 0%, transparent 50%), radial-gradient(circle at 80% 70%, rgba(255, 215, 0, 0.15) 0%, transparent 50%), radial-gradient(circle at 40% 80%, rgba(255, 51, 51, 0.1) 0%, transparent 50%); z-index: -1; } /* 雪花效果 */ .snowflake { position: absolute; top: -30px; color: rgba(255, 255, 255, 0.7); font-size: 1.2rem; animation: fall linear forwards; z-index: -1; } @keyframes fall { to { transform: translateY(100vh) rotate(360deg); opacity: 0; } } /* 元旦标题 */ .new-year-title { text-align: center; margin-bottom: 30px; color: white; text-shadow: 0 0 15px rgba(255, 51, 51, 0.8); } .new-year-title h1 { font-size: 2.2rem; margin-bottom: 10px; background: linear-gradient(90deg, #ff3333, #ffd700); -webkit-background-clip: text; background-clip: text; color: transparent; } .new-year-title p { font-size: 1rem; color: rgba(255, 255, 255, 0.8); margin-bottom: 5px; } /* 倒计时容器 */ .countdown-container { background: rgba(255, 255, 255, 0.1); backdrop-filter: blur(10px); border-radius: 20px; padding: 25px; text-align: center; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); border: 1px solid rgba(255, 255, 255, 0.2); max-width: 450px; width: 100%; margin-bottom: 25px; } .countdown-title { font-size: 1.5rem; margin-bottom: 25px; color: white; } .countdown-timer { display: flex; justify-content: space-around; flex-wrap: wrap; gap: 15px; } .time-unit { display: flex; flex-direction: column; align-items: center; flex: 1; min-width: 70px; } .time-value { font-size: 2.2rem; font-weight: bold; color: var(--gold); background: rgba(0, 0, 0, 0.3); width: 75px; height: 75px; display: flex; align-items: center; justify-content: center; border-radius: 50%; margin-bottom: 10px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); } .time-label { font-size: 1rem; color: rgba(255, 255, 255, 0.8); } /* 祝福语 */ .blessing { text-align: center; max-width: 500px; margin-top: 15px; padding: 18px; background: rgba(255, 255, 255, 0.05); border-radius: 15px; border-left: 4px solid var(--accent); border-right: 4px solid var(--accent); } .blessing p { font-size: 1.1rem; line-height: 1.6; color: white; font-style: italic; } /* 大屏幕隐藏换行 */ @media (min-width: 481px) { .blessing br { display: none; } } /* 大屏幕隐藏换行 */ @media (max-width: 481px) { .blessing p { letter-spacing: 8px; } } /* 工作室网格布局 */ .studio-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; padding: 15px; max-width: 500px; margin: 0 auto; overflow: hidden; } .studio-item { background: rgba(255, 255, 255, 0.05); border-radius: 16px; padding: 15px; text-align: center; transition: all 0.3s ease; display: flex; flex-direction: column; align-items: center; justify-content: center; aspect-ratio: 1/1; position: relative; overflow: hidden; } .studio-item:active { transform: scale(0.98); background: rgba(106, 103, 206, 0.2); } .studio-logo { width: 130px; height: 130px; border-radius: 50%; margin-bottom: 12px; object-fit: cover; border: 2px solid rgba(255, 255, 255, 0.1); box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); } .studio-name { font-size: 1.2rem; font-weight: 500; } /* 小说页面样式 */ #novels-page { overflow-y: auto; padding: 20px 15px; height: 100%; } .bookshelf { max-width: 100%; margin: 0 auto; display: flex; flex-direction: column; align-items: center; gap: 40px; } .shelf { display: flex; justify-content: center; flex-wrap: wrap; gap: 20px; width: 100%; } /* 书本样式 */ .book { width: 300px; height: 450px; cursor: pointer; transition: all 0.3s ease; position: relative; margin: 10px; } .book-cover { width: 100%; height: 100%; position: relative; transition: all 0.3s ease; } .book-cover img { width: 100%; height: 100%; object-fit: cover; border-radius: 6px; box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.4); border: 1px solid rgba(255, 255, 255, 0.1); transition: all 0.3s ease; } /* 悬浮效果 */ .book:active { transform: translateY(-8px) scale(1.05); } .book:active .book-cover img { box-shadow: 10px 15px 30px rgba(106, 103, 206, 0.4); filter: brightness(1.1); } /* 书本标题 */ .book-title { position: absolute; bottom: -30px; left: 50%; transform: translateX(-50%); color: white; font-size: 0.8rem; text-align: center; opacity: 0; transition: all 0.3s ease; background: rgba(106, 103, 206, 0.8); padding: 4px 10px; border-radius: 15px; white-space: nowrap; backdrop-filter: blur(5px); } .book:active .book-title { opacity: 1; bottom: -25px; } /* 详细页面样式 */ .detail-page { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: var(--primary); z-index: 100; overflow-y: auto; display: none; padding: 0 15px 70px; } /* 固定头部 */ .detail-header { display: flex; align-items: center; padding: 15px 0; background: var(--primary); position: fixed; top: 0; left: 0; width: 100%; z-index: 10; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); } .detail-header-content { max-width: 500px; margin: 0 auto; width: 100%; padding: 0 15px; display: flex; align-items: center; } .detail-logo { width: 50px; height: 50px; border-radius: 50%; margin-right: 15px; object-fit: cover; border: 2px solid rgba(255, 255, 255, 0.1); } .detail-title { font-size: 1.8rem; background: linear-gradient(90deg, #6a67ce, #57c9d5); -webkit-background-clip: text; background-clip: text; color: transparent; } /* 返回按钮 - 跟随滚动 */ .back-button { position: fixed; top: 15px; right: 15px; width: 40px; height: 40px; border-radius: 50%; background: rgba(255, 255, 255, 0.1); display: flex; align-items: center; justify-content: center; color: white; text-decoration: none; font-size: 1.2rem; z-index: 11; } /* 内容区域 */ .detail-content-container { margin-top: 80px; padding: 0 0 20px; } .content-section { margin-bottom: 25px; } .section-title { font-size: 1.4rem; margin-bottom: 1px; color: #6a67ce; padding-left: 15px; border-left: 4px solid #6a67ce;; } .section-content { font-size: 14pt; line-height: 1.6; color: rgba(255, 255, 255, 0.85); background: rgba(255, 255, 255, 0.05); padding: 15px; border-radius: 10px; } .section-content p { margin-bottom: 15px; } .section-content ul, .section-content ol { padding-left: 20px; margin-bottom: 15px; } .section-content li { margin-bottom: 8px; } /* 图片画廊样式 */ .gallery-section { margin: 35px 0; } .gallery-title { font-size: 1.2rem; margin-bottom: 12px; color: #6a67ce; } .gallery-container { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin-top: 15px; } .gallery-item { border-radius: 8px; overflow: hidden; height: 150px; cursor: pointer; transition: transform 0.3s ease; position: relative; } .gallery-item img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease; } .gallery-item:active { transform: scale(0.98); } /* 图片放大效果 */ .image-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.9); display: flex; align-items: center; justify-content: center; z-index: 1000; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; } .image-modal.active { opacity: 1; pointer-events: auto; } .modal-content { position: relative; max-width: 90%; max-height: 80%; } .modal-content img { width: auto; max-width: 100%; max-height: 80vh; border-radius: 8px; box-shadow: 0 5px 25px rgba(0, 0, 0, 0.5); } .close-modal { position: absolute; top: -40px; right: 0; color: white; font-size: 1.5rem; background: rgba(0, 0, 0, 0.5); width: 35px; height: 35px; border-radius: 50%; display: flex; align-items: center; justify-content: center; } /* 跳转按钮 */ .jump-buttons { display: grid; grid-template-columns: 1fr; gap: 10px; margin: 20px 0; } .jump-button { display: block; padding: 12px 15px; background: linear-gradient(90deg, #6a67ce, #57c9d5); color: white; text-decoration: none; border-radius: 8px; text-align: center; font-weight: 500; transition: all 0.3s ease; } .jump-button:active { transform: translateY(2px); } /* 社交媒体账号样式 */ .social-accounts { margin: 2rem 0; } .social-account { display: flex; align-items: center; justify-content: space-between; padding: 1rem 1.2rem; background: rgba(255, 255, 255, 0.05); border-radius: 10px; margin-bottom: 1rem; border-left: 3px solid #6a67ce; } .account-info { display: flex; flex-direction: column; flex: 1; } .platform-name { font-size: 1.2rem; font-weight: 600; color: #6a67ce; margin-bottom: 0.3rem; } .account-id { font-size: 1.1rem; color: rgba(255, 255, 255, 0.85); } .account-id span { margin: 0 6px; color: rgba(255, 255, 255, 0.4); } .copy-btn { background: linear-gradient(90deg, #6a67ce, #57c9d5); border: none; padding: 8px 12px; border-radius: 6px; color: white; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 5px; transition: all 0.3s ease; font-size: 0.9rem; min-width: 70px; justify-content: center; } .copy-btn:active { transform: translateY(2px); box-shadow: 0 2px 8px rgba(106, 103, 206, 0.4); } .copy-btn.copied { background: #4cd964; } /* Toast通知样式 */ .toast { position: fixed; bottom: 80px; left: 50%; transform: translateX(-50%); background: rgba(0, 0, 0, 0.85); color: white; padding: 12px 20px; border-radius: 8px; font-size: 14px; opacity: 0; transition: opacity 0.3s; pointer-events: none; z-index: 10000; text-align: center; max-width: 80%; } .toast.show { opacity: 1; } /* 改为正确的隐藏逻辑 */ .detail-page.active ~ .swipe-container, .detail-page.active ~ .page-indicator { display: none; } /* 主页滚动样式 */ .swipe-pagedata-pagehome { overflow-y: auto !important; } .home-container { min-height: 100%; padding-bottom: 20px; } .studio-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 15px; padding: 15px; max-width: 500px; margin: 0 auto; overflow: visible; } /* 确保工作室项目完全显示 */ .studio-item { background: rgba(255, 255, 255, 0.05); border-radius: 16px; padding: 15px; text-align: center; transition: all 0.3s ease; display: flex; flex-direction: column; align-items: center; justify-content: center; aspect-ratio: 1/1; position: relative; overflow: hidden; min-height: 150px; } .swipe-pagedata-pagehome::-webkit-scrollbar-track { bbackground: rgba(106, 103, 206, 0.5); border-radius: 3px; } .swipe-pagedata-pagehome::-webkit-scrollbar-thumb { background: rgba(106, 103, 206, 0.5); border-radius: 3px; } .swipe-pagedata-pagehome::-webkit-scrollbar-thumb:hover { background: rgba(106, 103, 206, 0.5); } /* 活动页面滚动样式 */ .swipe-pagedata-pageactivities { overflow-y: auto !important; } #activities-page { min-height: 100%; display: flex; flex-direction: column; } .activity-content { flex: 1; overflow-y: auto; } /* 小说页面滚动样式调整 */ .swipe-pagedata-pagenovels { overflow-y: auto; } /* 响应式调整 - 确保小屏幕也能正常滚动 */ @media (max-width: 360px) { .studio-grid { gap: 12px; padding: 12px; } .studio-item { padding: 12px; min-height: 140px; } .studio-logo { width: 100px; height: 100px; } .studio-name { font-size: 1.1rem; } .new-year-title h1 { font-size: 1.8rem; } .time-value { font-size: 1.8rem; width: 60px; height: 60px; } .countdown-container { padding: 20px; } } /* 确保滑动容器高度适应内容 */ .swipe-container { position: relative; width: 100%; height: calc(100vh - 80px); overflow: hidden; margin-top: 70px; touch-action: pan-y; } /* 修复滑动页面高度 */ .swipe-page { width: 100vw; height: 100%; flex-shrink: 0; transition: opacity 0.3s ease; } /* 主页特定样式 */ .home-page { min-height: 100%; display: flex; flex-direction: column; } /* 底部留出空间 */ .studio-grid::after { content: ; display: block; height: 20px; } /* 提示框样式 - 带图标版本 */ .click-prompt { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: linear-gradient(135deg, rgba(106, 103, 206, 0.95), rgba(87, 201, 213, 0.95)); color: white; padding: 30px 40px; border-radius: 25px; font-size: 1.4rem; font-weight: 600; text-align: center; z-index: 1000; box-shadow: 0 20px 50px rgba(106, 103, 206, 0.5); backdrop-filter: blur(20px); border: 2px solid rgba(255, 255, 255, 0.4); opacity: 0; transition: all 0.7s cubic-bezier(0.34, 1.56, 0.64, 1); pointer-events: none; text-shadow: 0 2px 15px rgba(0, 0, 0, 0.3); letter-spacing: 0.5px; display: flex; align-items: center; gap: 15px; } .click-prompt.show { opacity: 1; transform: translate(-50%, -50%) scale(1.08); } .click-prompt.hide { opacity: 0; transform: translate(-50%, -50%) scale(0.7) rotate(-5deg); } .click-prompt::before { content: 👆; font-size: 2rem; filter: drop-shadow(0 3px 10px rgba(0, 0, 0, 0.3)); } .click-prompt::after { content: ; position: absolute; bottom: -25px; left: 50%; transform: translateX(-50%); width: 0; height: 0; border-left: 18px solid transparent; border-right: 18px solid transparent; border-top: 18px solid rgba(106, 103, 206, 0.9); filter: drop-shadow(0 8px 20px rgba(0, 0, 0, 0.3)); } /* 响应式调整 */ @media (min-width: 500px) { .main-nav { max-width: 400px; } body { max-width: 500px; margin: 0 auto; box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); } } /* 响应式调整 */ @media (min-width: 418px) { .time-unit { min-width: 66px; } } /* 响应式调整 */ @media (min-width: 321px) { .time-unit { min-width: 48px; } } /* 美化登录页面样式 - 重新设计 */ .login-form { max-width: 400px; margin: 0 auto; padding: 30px 25px; background: rgba(255, 255, 255, 0.08); border-radius: 20px; backdrop-filter: blur(15px); box-shadow: 0 15px 35px rgba(0, 0, 0, 0.4); border: 1px solid rgba(255, 255, 255, 0.15); } .form-tab { display: flex; margin-bottom: 25px; border-bottom: 1px solid rgba(255,255,255,0.2); background: rgba(255,255,255,0.05); border-radius: 12px; padding: 5px; } .tab-button { flex: 1; padding: 12px; background: none; border: none; color: rgba(255,255,255,0.7); font-size: 1.1rem; cursor: pointer; border-radius: 8px; transition: all 0.3s ease; } .tab-button.active { color: white; background: linear-gradient(90deg, #6a67ce, #57c9d5); box-shadow: 0 4px 15px rgba(106, 103, 206, 0.4); } .tab-panel { display: none; } .tab-panel.active { display: block; animation: fadeIn 0.5s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .login-form input { width: 100%; padding: 15px 18px; margin-bottom: 18px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); border-radius: 12px; color: white; font-size: 1rem; transition: all 0.3s ease; } .login-form input:focus { outline: none; border-color: #6a67ce; background: rgba(255,255,255,0.15); box-shadow: 0 0 0 2px rgba(106, 103, 206, 0.3); } .login-form input::placeholder { color: rgba(255,255,255,0.5); } .login-form button { width: 100%; padding: 15px; background: linear-gradient(90deg, #6a67ce, #57c9d5); border: none; border-radius: 12px; color: white; font-size: 1.1rem; font-weight: 600; cursor: pointer; transition: all 0.3s ease; box-shadow: 0 5px 15px rgba(106, 103, 206, 0.4); } .login-form button:active { transform: translateY(2px); box-shadow: 0 2px 8px rgba(106, 103, 206, 0.4); } /* 输入错误样式 */ .login-form input.error { border-color: #ff3333; box-shadow: 0 0 0 2px rgba(255, 51, 51, 0.3); } .error-message { color: #ff3333; font-size: 0.85rem; margin-top: -10px; margin-bottom: 15px; text-align: left; display: none; } .error-message.show { display: block; } /* 用户页面样式 */ .user-profile { max-width: 500px; margin: 0 auto; } .profile-top { background: rgba(255,255,255,0.05); border-radius: 15px; padding: 25px; margin-bottom: 20px; text-align: center; position: relative; } .avatar-container { position: relative; display: inline-block; margin-bottom: 15px; } #user-avatar { width: 180px; height: 180px; border-radius: 50%; object-fit: cover; border: 3px solid #6a67ce; image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges; box-shadow: 0 5px 20px rgba(0, 0, 0, 0.3); } /* 删除编辑图标 */ .avatar-edit { display: none; } .username { font-size: 1.8rem; font-weight: bold; margin-bottom: -10px; color: white; } /* 删除称号选择框 */ .title-select { display: none; } .profile-menu { position: absolute; top: 20px; right: 20px; cursor: pointer; } .menu-dots { display: flex; flex-direction: column; gap: 3px; } .menu-dot { width: 4px; height: 4px; background: rgba(255,255,255,0.7); border-radius: 50%; } .vip-expire { color: #ffd700; font-size: 1rem; font-weight: bold; margin-top: 10px; letter-spacing: 2px; } .profile-bottom { background: rgba(255,255,255,0.05); border-radius: 15px; padding: 20px; } .section { margin-bottom: 25px; } .section h3 { color: #6a67ce; margin-bottom: 15px; font-size: 1.5rem; } /* 头像框、主题 - 强制每排三个 */ .avatar-frames, .themes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 15px; width: 100%; } /* 称号列表保持原来的纵向排列 */ .titles-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 15px; align-items: flex-start; } /* 响应式调整 - 确保小屏幕也能正常显示三列布局 */ @media (max-width: 480px) { .avatar-frames, .themes { gap: 8px; } .avatar-frame-item, .theme-item { padding: 6px; } .frame-name, .theme-name { font-size: 0.75rem; } /* 称号在移动端保持原样 */ .title-item { padding: 10px 12px; } .title-preview { width: 160px; height: 40px; font-size: 0.8rem; } } @media (max-width: 360px) { .avatar-frames, .themes { gap: 6px; } .avatar-frame-item, .theme-item { padding: 4px; } .frame-name, .theme-name { font-size: 0.7rem; } .title-item { padding: 8px 10px; } .title-preview { width: 140px; height: 35px; font-size: 0.75rem; } } /* 确保在极小屏幕上也能保持三列 */ @media (max-width: 320px) { .avatar-frames, .themes { grid-template-columns: repeat(3, 1fr); gap: 4px; } .frame-name, .theme-name { font-size: 0.65rem; } .title-preview { width: 120px; height: 30px; font-size: 0.7rem; } } .avatar-frame-item, .theme-item, .title-item { display: flex; flex-direction: column; align-items: center; cursor: pointer; padding: 10px; border-radius: 10px; transition: all 0.3s ease; } .avatar-frame-item.active, .theme-item.active, .title-item.active { background: rgba(106, 103, 206, 0.3); } .frame-img { width: 90px; height: 90px; border-radius: 50%; background: #666; margin-bottom: 8px; border: 3px solid transparent; background-size: cover; background-position: center; image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges; } .avatar-frame-item.active .frame-img { border-color: #6a67ce; box-shadow: 0 0 15px rgba(106, 103, 206, 0.6); } .theme-preview { width: 90px; height: 60px; border-radius: 8px; background: linear-gradient(135deg, #0a0a1a, #1a1a2e); margin-bottom: 8px; border: 2px solid transparent; background-size: cover; background-position: center; } .theme-item.active .theme-preview { border-color: #6a67ce; box-shadow: 0 0 15px rgba(106, 103, 206, 0.6); } .title-preview { width: 180px; height: 45px; border-radius: 8px; border: 2px solid transparent; display: flex; align-items: center; justify-content: center; color: rgba(255,255,255,0.7); font-size: 0.9rem; } .title-item.active .title-preview { border-color: #6a67ce; } .frame-name, .theme-name, .title-name { font-size: 0.9rem; color: rgba(255,255,255,0.8); margin-bottom: -8px; } .redeem-code { display: flex; gap: 10px; } #code-input { flex: 1; padding: 10px 15px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); border-radius: 8px; color: white; } #redeem-button { padding: 10px 20px; background: linear-gradient(90deg, #6a67ce, #57c9d5); border: none; border-radius: 8px; color: white; cursor: pointer; } .logout-section { text-align: center; margin-top: 30px; } #logout-button { padding: 12px 30px; background: #ff3333; border: none; border-radius: 8px; color: white; font-size: 1.1rem; cursor: pointer; } /* 模态框样式 */ .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.8); display: none; align-items: center; justify-content: center; z-index: 1000; } .modal.active { display: flex; } .modal-content { background: var(--primary); border-radius: 15px; padding: 25px; max-width: 400px; width: 90%; max-height: 80vh; overflow-y: auto; } .modal-content h3 { color: #6a67ce; margin-bottom: 20px; text-align: center; } .title-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; } .title-item { padding: 12px 15px; background: rgba(255,255,255,0.05); border-radius: 8px; cursor: pointer; transition: all 0.3s ease; } .title-item.active { background: rgba(106, 103, 206, 0.3); border-left: 3px solid #6a67ce; } .title-item img { height: 20px; margin-right: 10px; vertical-align: middle; } .modal-close { width: 100%; padding: 10px; background: rgba(255,255,255,0.1); border: none; border-radius: 8px; color: white; cursor: pointer; } /* 主题效果 - 修复版 */ body.theme-anniversary { background: linear-gradient(135deg, #000000, #ffffff) !important; } body.theme-anniversary .main-nav { background: rgba(0, 0, 0, 0.95); border: 1px solid rgba(255, 255, 255, 0.2); backdrop-filter: blur(15px); } body.theme-anniversary .nav-item { color: rgba(255, 255, 255, 0.9); } body.theme-anniversary .nav-item.active { color: #000000; background: rgba(255, 255, 255, 0.9); font-weight: 600; } body.theme-anniversary::before { content: ; position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: -1; } /* 只在主页显示三生万物文字 */ body.theme-anniversary .swipe-pagedata-pagehome::after { content: 三生万物; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 10rem; color: rgb(0 0 0 / 38%); font-family: Ma Shan Zheng, cursive; pointer-events: none; z-index: -1; writing-mode: vertical-lr; text-orientation: upright; white-space: nowrap; line-height: 1; letter-spacing: 0.3em; } body.theme-anniversary .studio-itemdata-studiomain .studio-logo { content: url(images/三周年logo.webp); object-fit: fill !important; background: transparent !important; } /* 三生万物主题下隐藏工作室背景和文字 */ body.theme-anniversary .studio-item { background: transparent !important; border: none !important; } body.theme-anniversary .studio-name { display: none !important; } /* 三生万物主题下的Logo大小 */ body.theme-anniversary .studio-logo { width: 150px; height: 150px; border: none !important; box-shadow: none !important; } /* VIP主题优化 - 修复背景问题 */ body.theme-vip { background: linear-gradient(135deg, #ffd700, #ffed4e) !important; } body.theme-vip .main-nav { background: rgba(255, 215, 0, 0.95); border: 1px solid rgba(0, 0, 0, 0.2); backdrop-filter: blur(15px); } body.theme-vip .nav-item { color: #000000; font-weight: 500; } body.theme-vip .nav-item.active { color: #ffd700; background: rgba(0, 0, 0, 0.9); font-weight: 600; } body.theme-vip::before { content: VIP; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 6rem; color: rgb(0 0 0 / 70%); font-weight: bold; pointer-events: none; z-index: -1; } /* VIP主题下隐藏工作室背景和文字 */ body.theme-vip .studio-item { background: transparent !important; border: none !important; overflow: visible !important; padding: 12px !important; min-height: 160px !important; margin: 0 !important; } body.theme-vip .studio-name { display: none !important; } /* VIP主题下的Logo立体效果 */ body.theme-vip .studio-logo { width: 140px; height: 140px; border: none !important; box-shadow: 0 0 12px rgba(255, 215, 0, 0.6), 0 0 25px rgba(255, 215, 0, 0.4), 0 0 35px rgba(255, 215, 0, 0.2), 0 4px 15px rgba(0, 0, 0, 0.5), inset 0 1px 6px rgba(255, 255, 255, 0.3); filter: brightness(1.1) contrast(1.1); transform: perspective(500px) rotateX(5deg); transition: all 0.3s ease; border-radius: 50%; position: relative; z-index: 1; } /* 悬停效果增强立体感 */ body.theme-vip .studio-item:active .studio-logo { transform: perspective(500px) rotateX(5deg) scale(1.05); box-shadow: 0 0 20px rgba(255, 215, 0, 0.8), 0 0 35px rgba(255, 215, 0, 0.6), 0 0 45px rgba(255, 215, 0, 0.4), 0 6px 20px rgba(0, 0, 0, 0.6), inset 0 2px 10px rgba(255, 255, 255, 0.4); filter: brightness(1.2) contrast(1.2); } /* 添加光晕效果 */ body.theme-vip .studio-item::before { content: ; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 150px; height: 150px; background: radial-gradient(circle at center, rgba(255, 215, 0, 0.3) 0%, transparent 70%); border-radius: 50%; z-index: 0; animation: goldPulse 3s ease-in-out infinite; pointer-events: none; } @keyframes goldPulse { 0%, 100% { opacity: 0.5; transform: translate(-50%, -50%) scale(1); } 50% { opacity: 0.8; transform: translate(-50%, -50%) scale(1.05); } } /* 调整工作室网格布局 */ body.theme-vip .studio-grid { gap: 15px !important; padding: 12px !important; max-width: 100% !important; grid-template-columns: repeat(2, 1fr) !important; margin-bottom: 0 !important; } /* 调整主页容器高度 */ body.theme-vip .swipe-pagedata-pagehome { height: calc(100vh - 80px) !important; overflow-y: auto !important; } body.theme-vip .home-container { min-height: calc(100vh - 80px) !important; padding-bottom: 10px !important; } /* 移除底部多余空间 */ body.theme-vip .studio-grid::after { display: none !important; } /* 响应式调整 - 小屏幕时进一步调整 */ @media (max-width: 400px) { body.theme-vip .studio-logo { width: 130px; height: 130px; } body.theme-vip .studio-item::before { width: 130px; height: 130px; } body.theme-vip .studio-grid { gap: 12px !important; padding: 8px !important; } body.theme-vip .studio-item { padding: 8px !important; min-height: 140px !important; } } @media (max-width: 360px) { body.theme-vip .studio-logo { width: 120px; height: 120px; } body.theme-vip .studio-item::before { width: 120px; height: 120px; } body.theme-vip .studio-grid { gap: 10px !important; padding: 6px !important; } body.theme-vip .studio-item { padding: 6px !important; min-height: 130px !important; } } /* 确保整体容器不超出屏幕 */ body.theme-vip { max-width: 100% !important; overflow-x: hidden !important; height: 100vh !important; } /* 确保滑动容器适应新尺寸 */ body.theme-vip .swipe-container { max-width: 100% !important; height: calc(100vh - 80px) !important; } /* 隐藏滚动条 */ body.theme-vip .swipe-pagedata-pagehome::-webkit-scrollbar { display: none; } body.theme-vip .swipe-pagedata-pagehome { -ms-overflow-style: none; scrollbar-width: none; } /* 头像框样式 - 修复贴合问题 */ .avatar-container .avatar-frame { position: absolute; top: -20px; left: -20px; width: 220px; height: 220px; pointer-events: none; z-index: 1; image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges; filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.3)); } /* 佩戴头像框时隐藏原头像框 */ .avatar-container.has-frame #user-avatar { border: none; } /* 编辑表单样式 */ .edit-form { display: flex; flex-direction: column; gap: 15px; } .avatar-upload { text-align: center; } /* 提高编辑预览头像清晰度 */ #edit-avatar-preview { width: 180px; height: 180px; border-radius: 50%; object-fit: cover; margin-bottom: 10px; border: 2px solid #6a67ce; image-rendering: -webkit-optimize-contrast; image-rendering: crisp-edges; } /* 响应式调整 */ @media (max-width: 360px) { .frame-img { width: 60px; height: 60px; } .theme-preview { width: 80px; height: 50px; } .title-select { padding: 8px 16px; font-size: 0.9rem; } .title-select img { height: 20px; } .title-item img { height: 20px; } } #upload-avatar-btn { padding: 8px 15px; background: rgba(106, 103, 206, 0.3); border: 1px solid #6a67ce; border-radius: 8px; color: white; cursor: pointer; } #edit-username { width: 100%; padding: 12px 15px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); border-radius: 8px; color: white; } #save-profile { padding: 12px; background: linear-gradient(90deg, #6a67ce, #57c9d5); border: none; border-radius: 8px; color: white; cursor: pointer; } /* 当前佩戴的称号显示 */ .current-title { margin-top: 5px; min-height: 45px; display: flex; align-items: center; justify-content: center; } .current-title img { height: 45px; border-radius: 15px; margin-top: 8px; } /* 修复工作室Logo显示问题 */ .studio-logo { object-fit: fill !important; background: transparent !important; } /* 用户信息编辑表单样式 */ .edit-form-section { margin-bottom: 20px; } .edit-form-section h4 { color: #6a67ce; margin-bottom: 10px; font-size: 1.2rem; } .edit-form-section input { width: 100%; padding: 12px 15px; margin-bottom: 15px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2); border-radius: 8px; color: white; } .edit-form-section button { width: 100%; padding: 12px; background: linear-gradient(90deg, #6a67ce, #57c9d5); border: none; border-radius: 8px; color: white; cursor: pointer; margin-top: 10px; } .phone-display { padding: 12px 15px; background: rgba(255,255,255,0.1); border-radius: 8px; margin-bottom: 15px; color: rgba(255,255,255,0.8); } /style>/head>body> !-- 导航栏 --> nav classmain-nav> div classnav-item data-pageactivities>活动/div> div classnav-item active data-pagehome>主页/div> div classnav-item data-pagenovels>小说/div> div classnav-item idlogin-nav-item>登录/div> /nav> !-- 滑动容器 --> div classswipe-container> div classswipe-wrapper> !-- 活动页面 - 元旦倒计时 --> div classswipe-page active data-pageactivities> div classnew-year-page> div classfestival-bg>/div> div classnew-year-title> h1>2026年元旦倒计时/h1> p>元旦时间:2026年01月01日 星期四 乙巳年(蛇年)农历十一月十三/p> p>目前距离2026年元旦倒计时还有/p> /div> div classcountdown-container> h2 classcountdown-title>元旦倒计时/h2> div classcountdown-timer> div classtime-unit> div classtime-value iddays>00/div> div classtime-label>天/div> /div> div classtime-unit> div classtime-value idhours>00/div> div classtime-label>时/div> /div> div classtime-unit> div classtime-value idminutes>00/div> div classtime-label>分/div> /div> div classtime-unit> div classtime-value idseconds>00/div> div classtime-label>秒/div> /div> /div> /div> div classblessing> p>岁岁年年,万象更新,br>一元复始,万象更新/p> /div> /div> /div> !-- 主页 --> div classswipe-page data-pagehome> div classstudio-grid> div classstudio-item data-studiomain> img srcimages/shiji.webp alt世纪工作室 classstudio-logo> div classstudio-name>世纪工作室/div> /div> div classstudio-item data-studiogame> img srcimages/game.webp alt世纪游戏 classstudio-logo> div classstudio-name>世纪游戏/div> /div> div classstudio-item data-studiotech> img srcimages/t.webp alt世纪科技 classstudio-logo> div classstudio-name>世纪科技/div> /div> div classstudio-item data-studiovideo> img srcimages/video.webp alt世纪视频 classstudio-logo> div classstudio-name>世纪视频/div> /div> div classstudio-item data-studioart> img srcimages/art.webp alt世纪文艺 classstudio-logo> div classstudio-name>世纪文艺/div> /div> div classstudio-item data-studiomusic> img srcimages/m.webp alt世纪乐队 classstudio-logo> div classstudio-name>世纪乐队/div> /div> div classstudio-item data-studiofinance> img srcimages/j.webp alt世纪金融 classstudio-logo> div classstudio-name>世纪金融/div> /div> /div> /div> !-- 小说页面 --> div classswipe-page data-pagenovels> div idnovels-page classpage> div classbookshelf> div classshelf> div classbook data-novel1> div classbook-cover> img srcimages/四季封面.webp alt四季> /div> /div> /div> /div> /div> /div> /div> /div> !-- 登录页面 --> div idlogin-page classdetail-page> div classdetail-header> div classdetail-header-content> h2 classdetail-title>登录/注册/h2> /div> /div> a hrefjavascript:void(0) classback-button idlogin-back-button> i classfas fa-arrow-left>/i> /a> div classdetail-content-container> div classlogin-form> div classform-tab> button classtab-button active data-tablogin>登录/button> button classtab-button data-tabregister>注册/button> /div> div classform-content> div classtab-panel active idlogin-panel> input typetext idlogin-account placeholder用户名或手机号 required> div classerror-message idlogin-account-error>/div> input typepassword idlogin-password placeholder密码 required> div classerror-message idlogin-password-error>/div> button idlogin-submit>登录/button> /div> div classtab-panel idregister-panel> input typetext idregister-username placeholder用户名 required> div classerror-message idregister-username-error>/div> input typetel idregister-phone placeholder手机号 required> div classerror-message idregister-phone-error>/div> input typepassword idregister-password placeholder密码 required> div classerror-message idregister-password-error>/div> input typepassword idregister-confirm-password placeholder确认密码 required> div classerror-message idregister-confirm-password-error>/div> button idregister-submit>注册/button> /div> /div> /div> /div> /div> !-- 用户页面 --> div iduser-page classdetail-page> div classdetail-header> div classdetail-header-content> h2 classdetail-title>个人中心/h2> /div> /div> a hrefjavascript:void(0) classback-button iduser-back-button> i classfas fa-arrow-left>/i> /a> div classdetail-content-container> div classuser-profile> div classprofile-top> !-- 三个点菜单 --> div classprofile-menu idprofile-menu> div classmenu-dots> div classmenu-dot>/div> div classmenu-dot>/div> div classmenu-dot>/div> /div> /div> div classavatar-section> div classavatar-container idavatar-container> img iduser-avatar src alt头像> /div> div classusername idusername-display>/div> !-- 当前佩戴的称号 --> div classvip-expire idvip-expire styledisplay: none;>/div> div classcurrent-title idcurrent-title>/div> /div> /div> div classprofile-bottom> div classsection> h3>头像框/h3> div classavatar-frames idavatar-frames> div classavatar-frame-item active data-framedefault> div classframe-img>/div> div classframe-name>默认/div> /div> /div> /div> div classsection> h3>主题/h3> div classthemes idthemes-list> div classtheme-item active data-themedefault> div classtheme-preview>/div> div classtheme-name>默认/div> /div> /div> /div> div classsection> h3>称号/h3> div classtitles-list idtitles-list> div classtitle-item active data-titledefault> div classtitle-preview>默认/div> div classtitle-name>默认/div> /div> /div> /div> div classsection> h3>兑换码/h3> div classredeem-code> input typetext idcode-input placeholder请输入兑换码> button idredeem-button>兑换/button> /div> /div> div classlogout-section> button idlogout-button>登出/button> /div> /div> /div> /div> /div> !-- 用户信息编辑模态框 --> div classmodal idedit-modal> div classmodal-content> h3>用户信息/h3> div classedit-form> div classedit-form-section> h4>修改头像/h4> div classavatar-upload> img idedit-avatar-preview src alt头像预览> input typefile idavatar-upload acceptimage/* styledisplay: none;> button idupload-avatar-btn>上传头像/button> /div> /div> div classedit-form-section> h4>修改用户名/h4> input typetext idedit-username placeholder用户名> button idsave-username>保存用户名/button> /div> div classedit-form-section> h4>修改密码/h4> input typepassword idold-password placeholder旧密码> input typepassword idnew-password placeholder新密码 (6-12位)> input typepassword idconfirm-password placeholder确认新密码> button idsave-password>保存密码/button> /div> div classedit-form-section> h4>手机号/h4> div classphone-display idphone-display>/div> p stylefont-size: 0.9rem; color: rgba(255,255,255,0.6);>手机号注册后不可更改/p> /div> button classmodal-close idedit-modal-close>关闭/button> /div> /div> /div> !-- 详细页面 --> div iddetail-page classdetail-page> div classdetail-header> div classdetail-header-content> img iddetail-logo src alt工作室Logo classdetail-logo> h2 iddetail-title classdetail-title>/h2> /div> /div> a hrefjavascript:void(0) classback-button idback-button> i classfas fa-arrow-left>/i> /a> div classdetail-content-container> div iddetail-content>/div> /div> /div> !-- 图片放大模态框 --> div classimage-modal idimage-modal> div classmodal-content> img idmodal-image src alt放大图片> div classclose-modal idclose-modal> i classfas fa-times>/i> /div> /div> /div> script> // 智能图片预加载功能 (function() { // 按优先级分组预加载 const priorityGroups { // 第一优先级:立即加载(Logo和封面) highPriority: images/shiji.webp, images/game.webp, images/art.webp, images/t.webp, images/video.webp, images/m.webp, images/j.webp, images/四季封面.webp , // 第二优先级:延迟加载(内容图片) mediumPriority: images/GunFight/1.webp, images/wenzhang/x.webp, images/other/taishan.webp, images/other/banbao.webp , // 第三优先级:用户交互后加载(大量图片) lowPriority: images/GunFight/2.webp, images/GunFight/3.webp, images/GunFight/4.webp, images/GunFight/5.webp, images/wenzhang/cf.webp, images/wenzhang/xy.webp, images/wenzhang/xy1.webp, images/wall/1.webp, images/wall/2.webp, images/wall/3.webp }; console.log(开始智能图片预加载...); // 立即加载高优先级图片 loadImageGroup(priorityGroups.highPriority, 高优先级); // 2秒后加载中优先级图片 setTimeout(() > { loadImageGroup(priorityGroups.mediumPriority, 中优先级); }, 2000); // 用户交互时加载低优先级图片 document.addEventListener(touchstart, loadLowPriorityImages, { once: true }); function loadImageGroup(imageList, groupName) { let loaded 0; console.log(`开始加载${groupName}图片: ${imageList.length}张`); imageList.forEach(src > { const img new Image(); img.onload function() { loaded++; if (loaded imageList.length) { console.log(`${groupName}图片加载完成`); } }; img.src src; }); } function loadLowPriorityImages() { console.log(用户交互,开始加载低优先级图片); loadImageGroup(priorityGroups.lowPriority, 低优先级); } })(); // 工作室数据 const studioData { main: { name: 世纪工作室, logo: images/shiji.webp, sections: { title: 世纪工作室, content: ` h4 classgallery-title>关于我们/h4> p styleletter-spacing: 2px;>故事要从本人小时候说起:那时候玩《我的世界》(网易版)因自己起的名字都被占用,于是随机取了一个名字——世纪家园小区。此后所有游戏ID都以世纪家园小区命名。在七年下学期期末,因一歌名为centuries(世纪)这首歌成了我最喜欢听的英文歌之一。世纪一词仿佛与我有某种密不可分的联系。后来八年上,想让自己的作品有一个组织,考虑到这组织就是工作室,而又想到了与我有密不可分联系的世纪,于是在2022年的9月,世纪工作室诞生了。此后我的一切创作便有了组织,在不断发展中,世纪工作室创作出了许多作品,也创立了许多子工作室来细分任务。世纪工作室坚持七大理念,精益求精、创新惊叹、想象、灵感、疯狂、严谨这些子工作室贯彻这些理念。未来将为大家带来无数惊世之作。/p> p styleletter-spacing: 7px;>最后我们工作室的座右铭收尾—/p> p stylefont-size:30px; font-weight: bold; > Everything is possible/p> p stylefont-size:30px; font-weight: bold; > (一切皆有可能)/p> `, }, { title: 历程, content: ` h4 classgallery-title>初中/h4> p styleletter-spacing: 2px;>在初中时就有许多小伙伴们加入到世纪工作室这个组织中。(校内7人,校外3人)。一节课间在操场上,众人聚在一起开会。决定了我们去做一个什么样的游戏Demo。这个Demo就是GunFight。成员们在不同的部门各司其职,美术部,音频部,游戏部……在分工合作中最终完成了demo的制作。/p> h4 classgallery-title>高中/h4> p styleletter-spacing: 2px;>在高中阶段设计工作室的理念继续完善和贯彻,我们创造出了一些震惊同学们的作品,在学校中,世纪工作室的LOGO经常出现,它的影响范围在不断扩大,我们将继续创造更加令人惊叹的作品。我们计划招募一些有梦想,敢拼搏的小伙伴们。在世纪工作室中一起追逐成就梦想。/p> `, }, { title: 作品, content: `p styleletter-spacing: 2px;>世纪工作室创立至今,创作出了许多令人为之惊叹的作品。下文将一一介绍:/p>`, }, { title: 《计算机讲解》, content: ` p styleletter-spacing: 2px;>世纪工作室早期作品,作者在2023年为装机自学计算机硬件。把所学知识和实践整理到一起,成为了这本《计算机讲解》。该书目前共167页,前151页完成于初二下学期。151页后为高中所作至今,未来将继续更新。/p> div classjump-buttons> a href/computer.html?studio世纪工作室 classjump-button>查看《计算机讲解》/a> /div> `, }, { title: GunFight Demo, content: `p styleletter-spacing: 2px;>世纪工作室第一个游戏项目,共有两个版本。/p>`, gallery: images/GunFight/1.webp, images/GunFight/2.webp, images/GunFight/3.webp, images/GunFight/4.webp, images/GunFight/5.webp }, { title: 地理小考, content: ` p styleletter-spacing: 2px;>作者作为地理课代表为同学们出的地理基础知识小考。/p> div classjump-buttons> a href/dili.html?studio世纪工作室 classjump-button>查看地理小考/a> /div> `, }, { title: 《英雄讲解·李信》, content: ` p styleletter-spacing: 2px;>李信作为作者最爱玩的英雄,作者为其所作讲解。/p> div classjump-buttons> a href/lixin.html?studio世纪工作室 classjump-button>查看《英雄讲解·李信》/a> /div> `, }, { title: 文章, content: `p styleletter-spacing: 2px;>作者所创作的文章,书法由同学书写/p>`, gallery: images/wenzhang/x.webp, images/wenzhang/cf.webp, images/wenzhang/xy.webp, images/wenzhang/xy1.webp }, { title: 表白墙, content: `p styleletter-spacing: 2px;>方案已作废/p>`, gallery: images/wall/1.webp, images/wall/2.webp, images/wall/3.webp, images/wall/4.webp, images/wall/5.webp, images/wall/6.webp, images/wall/7.webp, images/wall/8.webp, images/wall/9.webp, images/wall/10.webp, images/wall/11.webp, images/wall/12.webp, images/wall/13.webp }, { title: 世纪工作室网站, content: `p>2025年9月份是世纪工作室创立三周年,故建立此网站。/p>`, } }, finance: { name: 世纪金融, logo: images/j.webp, sections: { title: 关于我们, content: `p>世纪金融创立于2025年5月26日。负责管理世纪工作室的账目,核心理念是严谨,对于账目的记录工作,我们坚持严谨的态度,坚决认真记好每一笔账。做到不假账,不漏账,不偷税,不逃税。/p>` } , }, art: { name: 世纪文艺, logo: images/art.webp, sections: { title: 世纪文艺, content: ` h4 classgallery-title>关于我们/h4> p>世纪文艺创立于2025年5月21日,前身为世纪工作室美术部。主要负责插图绘制,游戏美工,文案等工作。/p> ` }, { title: 作品, content: `p>下文将介绍世纪文艺的一些作品/p>` }, { title: 文章, content: `p styleletter-spacing: 2px;>作者所创作的文章,书法由同学书写/p>`, gallery: images/wenzhang/x.webp, images/wenzhang/cf.webp, images/wenzhang/xy.webp, images/wenzhang/xy1.webp }, { title: 画作, content: `p styleletter-spacing: 2px;>《登泰山记》路线画作/p>`, gallery: images/other/taishan.webp }, { title: 板报, content: `p styleletter-spacing: 2px;>作者与另一位同学合作完成/p>`, gallery: images/other/banbao.webp }, { title: 《四季》, content: ` p>讲述主角成长和情感经历的一本小说/p> p>即将推出,敬请期待/p> `, gallery: } }, game: { name: 世纪游戏工作室, logo: images/game.webp, sections: { title: 世纪游戏, content: ` h4 classgallery-title>关于我们/h4> p>世纪游戏工作室创立于2022年10月,为世纪工作室的子工作室。主要负责有关游戏开发等工作,如游戏设计,建模,代码,游戏制作等工作。未来世纪游戏工作室将致力于VR(虚拟现实),AR(增强现实)游戏领域。/p> ` }, { title: 作品, content: `p>下文将介绍世纪游戏工作室的一些作品/p>`, }, { title: GunFight Demo, content: `p styleletter-spacing: 2px;>世纪工作室第一个游戏项目,共有两个版本。/p>`, gallery: images/GunFight/1.webp, images/GunFight/2.webp, images/GunFight/3.webp, images/GunFight/4.webp, images/GunFight/5.webp }, { title: 《英雄讲解·李信》, content: ` p styleletter-spacing: 2px;>李信作为作者最爱玩的英雄,作者为其所作讲解。/p> div classjump-buttons> a href/lixin.html?studio世纪工作室 classjump-button>查看《英雄讲解·李信》/a> /div> `, }, { title: 《英雄讲解·公孙离》, content: `p>即将推出,敬请期待/p>`, } }, tech: { name: 世纪科技, logo: images/t.webp, sections: { title: 世纪科技, content: ` h4 classgallery-title>关于我们/h4> p>世纪科技创立于2025年7月,致力于VR,AR,MR科技产品研发。我们的目标是成为像苹果那样引领智能设备的科技公司,也追求像小米那样让所有人都享受科技乐趣的理念。/p> `, }, { title: 产品, content: `p>敬请期待/p>`, } }, video: { name: 世纪视频创作工作室, logo: images/video.webp, sections: { title: 世纪视频, content: ` h4 classgallery-title>关于我们/h4> p>创立于2024年7月,前身为世纪工作室视频部。主要负责摄影,剪辑,特效制作,游戏宣传片制作,剧本编写,电影制作等。/p> `, }, { title: 官方账号, content: ` div classsocial-accounts> div classsocial-account> div classaccount-info> div classplatform-name>快手/div> div classaccount-id>ID: span>|/span> 2934521131/div> /div> button classcopy-btn data-id2934521131> i classfar fa-copy>/i> span>复制/span> /button> /div> div classsocial-account> div classaccount-info> div classplatform-name>抖音/div> div classaccount-id>ID: span>|/span> 33812775065/div> /div> button classcopy-btn data-id33812775065> i classfar fa-copy>/i> span>复制/span> /button> /div> div classsocial-account> div classaccount-info> div classplatform-name>微信/div> div classaccount-id>ID: span>|/span> centurystudio/div> /div> button classcopy-btn data-idcenturystudio> i classfar fa-copy>/i> span>复制/span> /button> /div> /div> `, }, { title: 作品, content: `p>敬请期待/p>`, gallery: } }, music: { name: 世纪乐队, logo: images/m.webp, sections: { title: 世纪乐队, content: ` h4 classgallery-title>关于我们/h4> p>世纪乐队创立于2024年11月,前身为世纪工作室音频部。主要负责音频,音乐创作,游戏配音,乐队表演等工作,核心理念是超越。不拘于世俗定义,用一个个音符来激发人们的热情。/p> `, }, { title: 作品, content: `p>敬请期待/p>`, } } }; // 小说数据 const novelData { 1: { title: 四季, url: siji.html } }; // DOM元素 - 在代码开头定义 const mainNav document.querySelector(.main-nav); const navItems document.querySelectorAll(.nav-item); const studioItems document.querySelectorAll(.studio-item); const books document.querySelectorAll(.book); const detailPage document.getElementById(detail-page); const detailLogo document.getElementById(detail-logo); const detailTitle document.getElementById(detail-title); const detailContent document.getElementById(detail-content); const backButton document.getElementById(back-button); const imageModal document.getElementById(image-modal); const modalImage document.getElementById(modal-image); const closeModal document.getElementById(close-modal); const swipeWrapper document.querySelector(.swipe-wrapper); const swipePages document.querySelectorAll(.swipe-page); // 用户系统相关的DOM元素 const loginPage document.getElementById(login-page); const userPage document.getElementById(user-page); const loginNavItem document.getElementById(login-nav-item); const loginBackButton document.getElementById(login-back-button); const userBackButton document.getElementById(user-back-button); const editModal document.getElementById(edit-modal); const profileMenu document.getElementById(profile-menu); // 登录表单元素 const loginAccountInput document.getElementById(login-account); const loginPasswordInput document.getElementById(login-password); const loginAccountError document.getElementById(login-account-error); const loginPasswordError document.getElementById(login-password-error); const loginSubmit document.getElementById(login-submit); // 注册表单元素 const registerUsernameInput document.getElementById(register-username); const registerPhoneInput document.getElementById(register-phone); const registerPasswordInput document.getElementById(register-password); const registerConfirmPasswordInput document.getElementById(register-confirm-password); const registerUsernameError document.getElementById(register-username-error); const registerPhoneError document.getElementById(register-phone-error); const registerPasswordError document.getElementById(register-password-error); const registerConfirmPasswordError document.getElementById(register-confirm-password-error); const registerSubmit document.getElementById(register-submit); // 用户页面元素 const userAvatar document.getElementById(user-avatar); const editAvatarPreview document.getElementById(edit-avatar-preview); const usernameDisplay document.getElementById(username-display); const currentTitle document.getElementById(current-title); const vipExpire document.getElementById(vip-expire); const codeInput document.getElementById(code-input); const redeemButton document.getElementById(redeem-button); const logoutButton document.getElementById(logout-button); // 编辑模态框元素 const uploadAvatarBtn document.getElementById(upload-avatar-btn); const avatarUpload document.getElementById(avatar-upload); const editUsername document.getElementById(edit-username); const saveUsername document.getElementById(save-username); const oldPassword document.getElementById(old-password); const newPassword document.getElementById(new-password); const confirmPassword document.getElementById(confirm-password); const savePassword document.getElementById(save-password); const phoneDisplay document.getElementById(phone-display); const editModalClose document.getElementById(edit-modal-close); // 滑动功能变量 let startX 0; let currentX 0; let startY 0; let currentY 0; let isSwiping false; let isHorizontal false; let currentPageIndex 0; // 0:活动, 1:主页, 2:小说 const pageOrder activities, home, novels; // 历史记录管理 let historyState { page: home, detail: null }; // 页面状态管理 let currentPageState { type: main, // main, detail, user, login data: null }; // 初始化历史记录 function initHistory() { // 设置初始状态 history.replaceState(historyState, , window.location.href); // 监听popstate事件(浏览器返回按钮) window.addEventListener(popstate, function(event) { if (event.state) { handleHistoryState(event.state); } else { // 如果没有状态,返回到主页面 hideAllDetailPages(); mainNav.classList.remove(hidden); switchPage(home); } }); } // 处理历史状态 function handleHistoryState(state) { console.log(处理历史状态:, state); if (state.detail) { // 显示详细页面,隐藏导航栏 showDetailPage(state.detail); mainNav.classList.add(hidden); } else { // 显示主页,显示导航栏 hideAllDetailPages(); mainNav.classList.remove(hidden); if (state.page && pageOrder.includes(state.page)) { switchPage(state.page); } else { // 默认显示主页 switchPage(home); } } } // 隐藏所有详情页面 function hideAllDetailPages() { detailPage.style.display none; userPage.style.display none; loginPage.style.display none; mainNav.classList.remove(hidden); // 确保导航栏显示 } // 显示详细页面 function showDetailPage(studioId) { const studio studioDatastudioId; if (!studio) return; // 隐藏导航栏和其他页面 hideAllDetailPages(); // 更新详细页面内容 detailLogo.src studio.logo; detailTitle.textContent studio.name; // 生成内容 detailContent.innerHTML ; studio.sections.forEach(section > { const sectionElement document.createElement(div); sectionElement.className content-section; let sectionHTML ` h3 classsection-title>${section.title}/h3> div classsection-content>${section.content}/div> `; if (section.gallery && section.gallery.length > 0) { sectionHTML + ` div classgallery-section> h4 classgallery-title>/h4> div classgallery-container> `; section.gallery.forEach(image > { sectionHTML + ` div classgallery-item> img src${image} alt${section.title}> /div> `; }); sectionHTML + ` /div> /div> `; } sectionElement.innerHTML sectionHTML; detailContent.appendChild(sectionElement); }); // 显示详细页面 detailPage.style.display block; // 添加图片点击事件 setTimeout(() > { const galleryItems detailContent.querySelectorAll(.gallery-item img); galleryItems.forEach(img > { img.addEventListener(click, function() { modalImage.src this.src; imageModal.classList.add(active); }); }); }, 100); // 初始化复制按钮 setTimeout(initCopyButtons, 100); // 滚动到顶部 detailPage.scrollTo(0, 0); // 更新历史状态 - 修复:确保导航栏隐藏 historyState.detail studioId; historyState.page detail; // 添加页面类型标识 history.pushState(historyState, , `#${studioId}`); // 确保导航栏隐藏 mainNav.classList.add(hidden); } // 隐藏详细页面 function hideDetailPage() { detailPage.style.display none; mainNav.classList.remove(hidden); historyState.detail null; historyState.page home; // 重置为主页 // 使用 replaceState 而不是 back,避免历史记录问题 history.replaceState(historyState, , window.location.pathname); // 确保切换到主页 switchPage(home); } // 初始化滑动功能 function initSwipe() { const swipeContainer document.querySelector(.swipe-container); swipeContainer.addEventListener(touchstart, handleTouchStart); swipeContainer.addEventListener(touchmove, handleTouchMove); swipeContainer.addEventListener(touchend, handleTouchEnd); } // 触摸事件处理 function handleTouchStart(e) { startX e.touches0.clientX; startY e.touches0.clientY; isSwiping true; isHorizontal false; } function handleTouchMove(e) { if (!isSwiping) return; currentX e.touches0.clientX; currentY e.touches0.clientY; const diffX currentX - startX; const diffY currentY - startY; // 判断是否是水平滑动 if (!isHorizontal && Math.abs(diffX) > Math.abs(diffY) && Math.abs(diffX) > 10) { isHorizontal true; } // 原有的主页面滑动逻辑 if (isHorizontal) { e.preventDefault(); if ((currentPageIndex 0 && diffX > 0) || (currentPageIndex 2 && diffX 0)) { return; } swipeWrapper.style.transform `translateX(calc(-${currentPageIndex * 33.33}% + ${diffX}px))`; } } function handleTouchEnd() { if (!isSwiping) return; isSwiping false; // 原有的主页面滑动逻辑 if (isHorizontal) { const diffX currentX - startX; const threshold 50; let targetIndex currentPageIndex; if (Math.abs(diffX) > threshold) { if (diffX > 0 && currentPageIndex > 0) { targetIndex currentPageIndex - 1; } else if (diffX 0 && currentPageIndex 2) { targetIndex currentPageIndex + 1; } } switchPageByIndex(targetIndex); swipeWrapper.style.transform `translateX(-${targetIndex * 33.33}%)`; } isHorizontal false; } // 通过索引切换页面 function switchPageByIndex(index) { currentPageIndex index; const pageName pageOrderindex; // 隐藏所有页面 swipePages.forEach(page > page.classList.remove(active)); // 显示当前页面 const currentPage document.querySelector(`.swipe-pagedata-page${pageName}`); if (currentPage) { currentPage.classList.add(active); } // 更新滑动位置 swipeWrapper.style.transform `translateX(-${index * 33.33}%)`; // 更新页面指示器 document.querySelectorAll(.page-dot).forEach((dot, i) > { dot.classList.toggle(active, i index); }); // 更新导航栏 navItems.forEach(item > { item.classList.toggle(active, item.dataset.page pageName); }); // 确保导航栏显示 mainNav.classList.remove(hidden); // 执行特定页面的初始化 if (pageName activities) { startCountdown(); } else if (pageName novels) { arrangeNovels(); } // 更新历史状态 historyState.page pageName; history.pushState(historyState, , `?page${pageName}`); } // 页面切换功能 function switchPage(pageName) { const targetIndex pageOrder.indexOf(pageName); if (targetIndex ! -1) { switchPageByIndex(targetIndex); } } // 导航项点击事件 navItems.forEach(item > { item.addEventListener(click, function() { const targetPage this.dataset.page; switchPage(targetPage); }); }); // 元旦倒计时 function startCountdown() { const newYearDate new Date(2026-01-01T00:00:00); function updateCountdown() { const now new Date(); const diff newYearDate - now; if (diff 0) { // 倒计时结束 document.getElementById(days).textContent 00; document.getElementById(hours).textContent 00; document.getElementById(minutes).textContent 00; document.getElementById(seconds).textContent 00; return; } const days Math.floor(diff / (1000 * 60 * 60 * 24)); const hours Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); const seconds Math.floor((diff % (1000 * 60)) / 1000); document.getElementById(days).textContent days.toString().padStart(2, 0); document.getElementById(hours).textContent hours.toString().padStart(2, 0); document.getElementById(minutes).textContent minutes.toString().padStart(2, 0); document.getElementById(seconds).textContent seconds.toString().padStart(2, 0); } updateCountdown(); setInterval(updateCountdown, 1000); } // 精确控制版本 - 从屏幕顶部生成 function createSnowflakes() { const snowflakeContainer document.querySelector(.new-year-page); const snowflakes ❄, ❅, ❆, •; let snowflakeCount 0; const maxSnowflakes 35; function createSnowflake() { if (snowflakeCount > maxSnowflakes) return; const snowflake document.createElement(div); snowflake.className snowflake; snowflake.textContent snowflakesMath.floor(Math.random() * snowflakes.length); // 计算屏幕宽度,确保雪花在可见范围内 const containerWidth snowflakeContainer.clientWidth; const left Math.random() * (containerWidth - 30); // 留出边距 // 从屏幕顶部上方开始(-30px到-10px) const startTop -(Math.random() * 20 + 10); const size Math.random() * 1.5 + 0.5; const opacity Math.random() * 0.7 + 0.3; const duration Math.random() * 15 + 10; // 10-25秒 const delay Math.random() * 2; // 使用px单位而不是%,确保精确位置 snowflake.style.left `${left}px`; snowflake.style.top `${startTop}px`; snowflake.style.fontSize `${size}rem`; snowflake.style.opacity opacity; snowflake.style.animationDuration `${duration}s`; snowflake.style.animationDelay `${delay}s`; snowflakeContainer.appendChild(snowflake); snowflakeCount++; // 移除过期雪花 setTimeout(() > { if (snowflake.parentNode) { snowflake.parentNode.removeChild(snowflake); snowflakeCount--; } }, (duration + delay) * 1000); } // 初始批次 for (let i 0; i 12; i++) { createSnowflake(); } // 持续生成 setInterval(createSnowflake, 350); // 窗口大小变化时重新调整 window.addEventListener(resize, function() { // 可以在这里添加重新计算位置的逻辑 }); } // 自动排列小说函数 function arrangeNovels() { const shelves document.querySelectorAll(.shelf); shelves.forEach(shelf > { const books shelf.querySelectorAll(.book); const bookCount books.length; shelf.setAttribute(data-book-count, bookCount); }); } // 小说点击跳转函数 function handleNovelClick(novelId) { const novel novelDatanovelId; if (!novel) return; const clickedBook document.querySelector(`.bookdata-novel${novelId}`); if (clickedBook) { clickedBook.style.transform translateY(-5px) scale(0.95); setTimeout(() > { clickedBook.style.transform ; window.location.href novel.url; }, 200); } } // 小说点击事件 books.forEach(book > { book.addEventListener(click, function(e) { e.preventDefault(); const novelId this.dataset.novel; handleNovelClick(novelId); }); book.setAttribute(tabindex, 0); book.setAttribute(role, button); }); // 工作室点击事件 studioItems.forEach(item > { item.addEventListener(click, function(e) { e.stopPropagation(); // 阻止事件冒泡 const studioId this.getAttribute(data-studio); showDetailPage(studioId); }); }); // 返回按钮事件 - 修复返回逻辑 backButton.addEventListener(click, function() { hideDetailPage(); }); // 登录页面返回按钮 if (loginBackButton) { loginBackButton.addEventListener(click, hideLoginPage); } // 用户页面返回按钮 if (userBackButton) { userBackButton.addEventListener(click, hideUserPage); } // 关闭模态框事件 closeModal.addEventListener(click, function() { imageModal.classList.remove(active); }); // 点击模态框背景关闭 imageModal.addEventListener(click, function(e) { if (e.target imageModal) { imageModal.classList.remove(active); } }); // 复制功能 function copyToClipboard(text) { if (navigator.clipboard && window.isSecureContext) { return navigator.clipboard.writeText(text).then(() > { return true; }).catch(err > { console.error(无法使用Clipboard API复制:, err); return fallbackCopyToClipboard(text); }); } else { return fallbackCopyToClipboard(text); } } function fallbackCopyToClipboard(text) { return new Promise((resolve, reject) > { const textarea document.createElement(textarea); textarea.value text; textarea.style.position fixed; textarea.style.opacity 0; document.body.appendChild(textarea); try { textarea.select(); textarea.setSelectionRange(0, textarea.value.length); const successful document.execCommand(copy); document.body.removeChild(textarea); if (successful) { resolve(true); } else { reject(new Error(复制失败)); } } catch (err) { document.body.removeChild(textarea); reject(err); } }); } // 显示Toast通知 function showToast(message, isError false) { const existingToast document.querySelector(.toast); if (existingToast) { document.body.removeChild(existingToast); } const toast document.createElement(div); toast.className toast; toast.textContent message; if (isError) { toast.style.background rgba(255, 59, 48, 0.9); } document.body.appendChild(toast); toast.offsetHeight; toast.classList.add(show); setTimeout(() > { toast.classList.remove(show); setTimeout(() > { if (toast.parentNode) { document.body.removeChild(toast); } }, 300); }, 2000); } // 初始化复制按钮事件 function initCopyButtons() { const copyButtons document.querySelectorAll(.copy-btn); copyButtons.forEach(button > { button.addEventListener(click, async function() { const id this.getAttribute(data-id); const originalText this.querySelector(span).textContent; try { await copyToClipboard(id); showToast(已复制到剪贴板); this.querySelector(span).textContent 已复制; this.classList.add(copied); setTimeout(() > { this.querySelector(span).textContent originalText; this.classList.remove(copied); }, 2000); } catch (err) { console.error(复制失败:, err); showToast(`复制失败,请手动复制: ${id}`, true); } }); }); } // 在页面加载时初始化 window.addEventListener(load, function() { console.log(页面加载完成,开始初始化...); // 首先初始化DOM元素引用 initDOMElements(); // 然后初始化其他功能 mainNav.classList.remove(hidden); initHistory(); initSwipe(); // 检查URL参数来决定初始页面 const urlParams new URLSearchParams(window.location.search); const pageParam urlParams.get(page); const hashParam window.location.hash.substring(1); if (hashParam && studioDatahashParam) { // 如果有hash参数且对应工作室存在,显示详细页面并隐藏导航栏 showDetailPage(hashParam); mainNav.classList.add(hidden); } else if (pageParam && pageOrder.includes(pageParam)) { // 如果有page参数且有效,切换到对应页面 switchPage(pageParam); mainNav.classList.remove(hidden); } else { // 默认显示主页 switchPageByIndex(1); mainNav.classList.remove(hidden); } // 创建雪花效果 createSnowflakes(); arrangeNovels(); // 添加点击查看提示功能 showClickPrompt(); // 最后初始化用户界面 initUserInterface(); initUserEvents(); console.log(页面初始化完成); }); // 初始化DOM元素的辅助函数 function initDOMElements() { console.log(初始化DOM元素...); // 这里可以重新获取任何可能为null的DOM元素 if (!loginNavItem) { console.warn(loginNavItem 未找到,尝试重新获取); // 可以在这里尝试重新获取,但通常不需要 } } // 显示点击查看提示 - 点击页面任意位置消失 function showClickPrompt() { // 检查是否已经显示过提示 const hasSeenPrompt localStorage.getItem(hasSeenClickPrompt); if (hasSeenPrompt) { return; // 已经显示过,不再显示 } // 创建提示元素 const prompt document.createElement(div); prompt.className click-prompt; prompt.innerHTML span>点击Logo查看详细内容/span>; document.body.appendChild(prompt); // 显示提示 setTimeout(() > { prompt.classList.add(show); }, 1000); // 点击页面任意位置消失 function hidePrompt() { prompt.classList.remove(show); prompt.classList.add(hide); setTimeout(() > { if (prompt.parentNode) { document.body.removeChild(prompt); } // 标记为已显示 localStorage.setItem(hasSeenClickPrompt, true); }, 500); } // 添加点击事件到整个文档 document.addEventListener(click, function hideOnClick() { hidePrompt(); document.removeEventListener(click, hideOnClick); }); // 添加触摸事件到整个文档 document.addEventListener(touchstart, function hideOnTouch() { hidePrompt(); document.removeEventListener(touchstart, hideOnTouch); }); // 4.5秒后自动隐藏 setTimeout(() > { if (prompt.parentNode) { hidePrompt(); } }, 4500); } // 确保在窗口调整大小时重新排列 window.addEventListener(resize, arrangeNovels); // 用户数据管理 - 完整版本 const userManager { // API基础URL apiUrl: api.php, // 发送API请求 async apiCall(data) { try { console.log(发送API请求:, data); const formData new FormData(); for (let key in data) { formData.append(key, datakey); } const response await fetch(this.apiUrl, { method: POST, body: formData }); const result await response.json(); console.log(API响应:, result); return result; } catch (error) { console.error(API请求失败:, error); return { success: false, message: 网络请求失败 }; } }, // 注册新用户 async register(username, phone, password) { console.log(开始注册:, username, phone); const result await this.apiCall({ action: register, username: username, phone: phone, password: password }); if (result.success) { console.log(注册成功,用户数据:, result.user); // 确保数据完整 const userData this.ensureUserDataComplete(result.user); this.setCurrentUser(userData); localStorage.setItem(century_user_token, userData.id); } else { console.log(注册失败:, result.message); } return result; }, // 登录 async login(account, password) { console.log(开始登录:, account); const result await this.apiCall({ action: login, account: account, password: password }); if (result.success) { console.log(登录成功,用户数据:, result.user); // 确保数据完整 const userData this.ensureUserDataComplete(result.user); this.setCurrentUser(userData); localStorage.setItem(century_user_token, userData.id); } else { console.log(登录失败:, result.message); } return result; }, // 确保用户数据完整的辅助方法 ensureUserDataComplete(user) { return { id: user.id, username: user.username, phone: user.phone, avatar: user.avatar || null, title: user.title || default, current_frame: user.current_frame || user.currentFrame || default, current_theme: user.current_theme || user.currentTheme || default, vip_expire: user.vip_expire || user.vipExpire || null, has_anniversary: user.has_anniversary || user.hasAnniversary || false, frames: user.frames || default, themes: user.themes || default, unlocked_titles: user.unlocked_titles || user.unlockedTitles || default, created_at: user.created_at || user.createdAt }; }, // 获取当前登录用户 getCurrentUser() { try { const userData localStorage.getItem(century_current_user); if (!userData) { console.log(没有找到用户数据); return null; } const parsed JSON.parse(userData); console.log(获取到用户数据:, parsed); return parsed; } catch (error) { console.error(解析用户数据失败:, error); return null; } }, // 设置当前登录用户 setCurrentUser(user) { console.log(设置用户数据:, user); localStorage.setItem(century_current_user, JSON.stringify(user)); }, // 注销 logout() { localStorage.removeItem(century_current_user); localStorage.removeItem(century_user_token); }, // 上传头像 async uploadAvatar(avatarData) { const user this.getCurrentUser(); if (!user) return { success: false, message: 用户未登录 }; const result await this.apiCall({ action: upload_avatar, user_id: user.id, avatar: avatarData }); if (result.success) { // 更新本地用户数据 user.avatar result.avatar_url; this.setCurrentUser(user); } return result; }, // 更新用户信息 async updateUser(userData) { const user this.getCurrentUser(); if (!user) return { success: false, message: 用户未登录 }; for (let field in userData) { const result await this.apiCall({ action: update_profile, user_id: user.id, field: field, value: userDatafield }); if (!result.success) { return result; } // 更新本地数据 userfield userDatafield; } this.setCurrentUser(user); return { success: true }; }, // 替换 userManager.useRedeemCode 方法为以下内容: async useRedeemCode(code) { const user this.getCurrentUser(); if (!user) return { success: false, message: 用户未登录 }; console.log(开始兑换码:, code, 用户:, user.id); const result await this.apiCall({ action: use_code, user_id: user.id, code: code }); console.log(兑换结果:, result); if (result.success) { console.log(兑换成功,类型:, result.type); // 根据兑换类型手动更新本地用户数据 const updatedUser { ...user }; if (result.type anniversary) { // 添加三周年物品 if (!updatedUser.frames.includes(anniversary)) { updatedUser.frames.push(anniversary); } if (!updatedUser.themes.includes(anniversary)) { updatedUser.themes.push(anniversary); } if (!updatedUser.unlocked_titles.includes(anniversary)) { updatedUser.unlocked_titles.push(anniversary); } updatedUser.has_anniversary true; } else if (result.type vip) { // 添加VIP物品 if (!updatedUser.frames.includes(vip)) { updatedUser.frames.push(vip); } if (!updatedUser.themes.includes(vip)) { updatedUser.themes.push(vip); } if (!updatedUser.unlocked_titles.includes(vip)) { updatedUser.unlocked_titles.push(vip); } // 设置VIP过期时间(一年) const expireDate new Date(); expireDate.setFullYear(expireDate.getFullYear() + 1); updatedUser.vip_expire expireDate.toISOString().split(T)0; } console.log(更新后的用户数据:, updatedUser); this.setCurrentUser(updatedUser); return { ...result, user: updatedUser }; } return result; } } // 初始化用户界面 function initUserInterface() { try { // 安全检查 if (!loginNavItem) { console.warn(loginNavItem 未找到,跳过用户界面初始化); return; } const currentUser userManager.getCurrentUser(); console.log(初始化用户界面,当前用户:, currentUser); if (currentUser && currentUser.username) { // 有效的用户对象 loginNavItem.textContent 我的; applyUserTheme(currentUser.current_theme || default); updateAvatarFrame(currentUser.current_frame || default); console.log(用户已登录,显示我的); } else { // 没有用户或用户数据无效 loginNavItem.textContent 登录; // 确保应用默认主题 applyUserTheme(default); updateAvatarFrame(default); console.log(用户未登录,显示登录); } } catch (error) { console.error(初始化用户界面失败:, error); loginNavItem.textContent 登录; applyUserTheme(default); updateAvatarFrame(default); } } // 应用用户主题 function applyUserTheme(theme) { document.body.className ; if (theme && theme ! default) { document.body.classList.add(`theme-${theme}`); } console.log(应用主题:, theme); } // 更新头像框 function updateAvatarFrame(frame) { const avatarContainer document.getElementById(avatar-container); if (!avatarContainer) return; const existingFrame avatarContainer.querySelector(.avatar-frame); if (existingFrame) { existingFrame.remove(); } // 更新头像框容器类名 if (frame && frame ! default) { avatarContainer.classList.add(has-frame); const frameElement document.createElement(img); frameElement.className avatar-frame; frameElement.src `images/frames/${frame}.webp`; frameElement.alt `${frame}头像框`; frameElement.onerror function() { console.log(头像框图片加载失败:, this.src); this.style.display none; }; avatarContainer.appendChild(frameElement); } else { avatarContainer.classList.remove(has-frame); } console.log(更新头像框:, frame); } // 显示用户页面 - 完整版本 function showUserPage() { const user userManager.getCurrentUser(); console.log(显示用户页面,用户数据:, user); if (!user) { console.log(用户未登录,跳转到登录页面); showLoginPage(); return; } // 更新用户信息显示 document.getElementById(username-display).textContent user.username; console.log(设置用户名:, user.username); // 更新头像 const userAvatar document.getElementById(user-avatar); const editAvatarPreview document.getElementById(edit-avatar-preview); if (user.avatar) { userAvatar.src user.avatar; editAvatarPreview.src user.avatar; console.log(设置头像:, user.avatar); } else { // 生成默认头像(用户名第一个字符) const defaultAvatar generateDefaultAvatar(user.username); userAvatar.src defaultAvatar; editAvatarPreview.src defaultAvatar; console.log(设置默认头像); } // 更新VIP信息 - 现在在用户名后面显示 const vipExpire document.getElementById(vip-expire); if (user.vip_expire) { vipExpire.style.display block; vipExpire.textContent `VIP到期: ${user.vip_expire}`; } else { vipExpire.style.display none; } // 更新当前佩戴的称号 - 现在在VIP信息后面显示 const currentTitle document.getElementById(current-title); if (user.title && user.title ! default) { currentTitle.innerHTML `img srcimages/titles/${user.title}.webp alt${user.title} onerrorthis.style.displaynone>`; } else { currentTitle.innerHTML ; } // 更新头像框列表 updateFrameList(user); // 更新主题列表 updateThemeList(user); // 更新称号列表 updateTitleList(user); userPage.style.display block; mainNav.classList.add(hidden); // 推送历史状态 history.pushState({ page: user }, , #user); console.log(用户页面显示完成); } // 显示登录页面 function showLoginPage() { loginPage.style.display block; mainNav.classList.add(hidden); // 确保导航栏隐藏 // 推送历史状态 history.pushState({ page: login, detail: null }, , #login); } // 隐藏登录页面 function hideLoginPage() { loginPage.style.display none; mainNav.classList.remove(hidden); // 确保导航栏显示 history.back(); } // 隐藏用户页面 function hideUserPage() { userPage.style.display none; mainNav.classList.remove(hidden); // 确保导航栏显示 history.back(); } // 生成默认头像 function generateDefaultAvatar(username) { const canvas document.createElement(canvas); canvas.width 100; canvas.height 100; const ctx canvas.getContext(2d); // 背景颜色 const colors #4a90e2, #ff6b6b, #51cf66, #f59f00, #9c36b5; const color colorsusername.charCodeAt(0) % colors.length; ctx.fillStyle color; ctx.fillRect(0, 0, 100, 100); // 文字 ctx.fillStyle white; ctx.font 40px Arial; ctx.textAlign center; ctx.textBaseline middle; ctx.fillText(username.charAt(0).toUpperCase(), 50, 50); return canvas.toDataURL(); } // 更新头像框列表 - 修复选择框问题 function updateFrameList(user) { const frameContainer document.getElementById(avatar-frames); if (!frameContainer) return; frameContainer.innerHTML ; // 确保 frames 存在且是数组 const frames user.frames || default; console.log(更新头像框列表:, frames); frames.forEach(frame > { const frameItem document.createElement(div); frameItem.className `avatar-frame-item ${frame (user.current_frame || default) ? active : }`; frameItem.dataset.frame frame; const frameImg document.createElement(div); frameImg.className frame-img; if (frame ! default) { frameImg.style.background `url(images/frames/${frame}.webp) center/cover`; frameImg.onerror function() { this.style.background #666; console.log(头像框图片加载失败:, frame); }; } else { frameImg.style.background #666; } const frameName document.createElement(div); frameName.className frame-name; frameName.textContent getFrameName(frame); frameItem.appendChild(frameImg); frameItem.appendChild(frameName); frameContainer.appendChild(frameItem); frameItem.addEventListener(click, async function() { if (frame ! user.current_frame) { // 显示加载状态 const originalText this.querySelector(.frame-name).textContent; this.querySelector(.frame-name).textContent 更换中...; try { const result await userManager.updateUser({ current_frame: frame }); if (result.success) { // 更新本地用户数据 user.current_frame frame; userManager.setCurrentUser(user); // 更新头像框显示 updateAvatarFrame(frame); // 重新渲染列表以更新激活状态 updateFrameList(user); showToast(已更换头像框); } else { showToast(更换失败,请重试, true); this.querySelector(.frame-name).textContent originalText; } } catch (error) { console.error(更换头像框失败:, error); showToast(网络错误,请重试, true); this.querySelector(.frame-name).textContent originalText; } } }); }); } // 更新主题列表 - 修复选择框问题 function updateThemeList(user) { const themeContainer document.getElementById(themes-list); if (!themeContainer) return; themeContainer.innerHTML ; // 确保 themes 存在且是数组 const themes user.themes || default; console.log(更新主题列表:, themes); themes.forEach(theme > { const themeItem document.createElement(div); themeItem.className `theme-item ${theme (user.current_theme || default) ? active : }`; themeItem.dataset.theme theme; const themePreview document.createElement(div); themePreview.className theme-preview; themePreview.style.background getThemePreview(theme); const themeName document.createElement(div); themeName.className theme-name; themeName.textContent getThemeName(theme); themeItem.appendChild(themePreview); themeItem.appendChild(themeName); themeContainer.appendChild(themeItem); themeItem.addEventListener(click, async function() { if (theme ! user.current_theme) { // 显示加载状态 const originalText this.querySelector(.theme-name).textContent; this.querySelector(.theme-name).textContent 更换中...; try { const result await userManager.updateUser({ current_theme: theme }); if (result.success) { // 更新本地用户数据 user.current_theme theme; userManager.setCurrentUser(user); // 应用新主题 applyUserTheme(theme); // 重新渲染列表以更新激活状态 updateThemeList(user); showToast(已更换主题); } else { showToast(更换失败,请重试, true); this.querySelector(.theme-name).textContent originalText; } } catch (error) { console.error(更换主题失败:, error); showToast(网络错误,请重试, true); this.querySelector(.theme-name).textContent originalText; } } }); }); } // 更新称号列表 - 修复选择框问题 function updateTitleList(user) { const titleContainer document.getElementById(titles-list); if (!titleContainer) return; titleContainer.innerHTML ; // 确保 unlocked_titles 存在且是数组 const unlockedTitles user.unlocked_titles || default; console.log(更新称号列表:, unlockedTitles); unlockedTitles.forEach(title > { const titleItem document.createElement(div); titleItem.className `title-item ${title (user.title || default) ? active : }`; titleItem.dataset.title title; const titlePreview document.createElement(div); titlePreview.className title-preview; if (title default) { titlePreview.textContent 默认; } else { // 如果有称号图片,使用图片 titlePreview.style.background `url(images/titles/${title}.webp) center/cover`; titlePreview.textContent ; titlePreview.onerror function() { this.style.background rgba(255,255,255,0.1); this.textContent getTitleName(title); console.log(称号图片加载失败:, title); }; } const titleName document.createElement(div); titleName.className title-name; titleName.textContent getTitleName(title); titleItem.appendChild(titlePreview); titleItem.appendChild(titleName); titleContainer.appendChild(titleItem); titleItem.addEventListener(click, async function() { if (title ! user.title) { // 显示加载状态 const originalText this.querySelector(.title-name).textContent; this.querySelector(.title-name).textContent 更换中...; try { const result await userManager.updateUser({ title: title }); if (result.success) { // 更新本地用户数据 user.title title; userManager.setCurrentUser(user); // 重新渲染列表以更新激活状态 updateTitleList(user); // 刷新用户页面显示当前佩戴的称号 showUserPage(); showToast(已更换称号); } else { showToast(更换失败,请重试, true); this.querySelector(.title-name).textContent originalText; } } catch (error) { console.error(更换称号失败:, error); showToast(网络错误,请重试, true); this.querySelector(.title-name).textContent originalText; } } }); }); } // 获取头像框名称 function getFrameName(frame) { const names { default: 默认, anniversary: 三周年, vip: VIP }; return namesframe || frame; } // 获取主题名称 function getThemeName(theme) { const names { default: 默认, anniversary: 三生万物, vip: VIP }; return namestheme || theme; } // 获取主题预览 function getThemePreview(theme) { const previews { default: linear-gradient(135deg, #0a0a1a, #1a1a2e), anniversary: linear-gradient(135deg, #000000, #ffffff), vip: linear-gradient(135deg, #ffd700, #ffed4e) }; return previewstheme || previews.default; } // 获取称号名称 function getTitleName(title) { const names { default: 默认, anniversary: 三生万物, vip: VIP }; return namestitle || title; } // 显示登录页面 function showLoginPage() { loginPage.style.display block; mainNav.classList.add(hidden); // 推送历史状态 history.pushState({ page: login }, , #login); } // 隐藏登录页面 function hideLoginPage() { loginPage.style.display none; mainNav.classList.remove(hidden); history.back(); } // 隐藏用户页面 function hideUserPage() { userPage.style.display none; mainNav.classList.remove(hidden); history.back(); } // 用户系统事件监听 function initUserEvents() { // 导航栏登录按钮 if (loginNavItem) { loginNavItem.addEventListener(click, function() { if (userManager.getCurrentUser()) { showUserPage(); } else { showLoginPage(); } }); } // 登录页面返回按钮 if (loginBackButton) { loginBackButton.addEventListener(click, hideLoginPage); } // 用户页面返回按钮 if (userBackButton) { userBackButton.addEventListener(click, hideUserPage); } // 三个点菜单 - 直接打开编辑模态框 if (profileMenu) { profileMenu.addEventListener(click, function() { const user userManager.getCurrentUser(); if (user) { // 填充当前用户信息 document.getElementById(edit-username).value user.username; document.getElementById(phone-display).textContent `手机号: ${user.phone}`; // 清空密码字段 document.getElementById(old-password).value ; document.getElementById(new-password).value ; document.getElementById(confirm-password).value ; editModal.classList.add(active); } }); } // 关闭编辑模态框 const editModalClose document.getElementById(edit-modal-close); if (editModalClose) { editModalClose.addEventListener(click, function() { editModal.classList.remove(active); }); } // 登录/注册标签切换 document.querySelectorAll(.tab-button).forEach(button > { button.addEventListener(click, function() { const tab this.dataset.tab; // 更新按钮状态 document.querySelectorAll(.tab-button).forEach(btn > { btn.classList.remove(active); }); this.classList.add(active); // 更新面板 document.querySelectorAll(.tab-panel).forEach(panel > { panel.classList.remove(active); }); document.getElementById(`${tab}-panel`).classList.add(active); }); }); // 登录表单验证 const loginAccountInput document.getElementById(login-account); const loginPasswordInput document.getElementById(login-password); const loginAccountError document.getElementById(login-account-error); const loginPasswordError document.getElementById(login-password-error); if (loginAccountInput) { loginAccountInput.addEventListener(blur, function() { if (!this.value.trim()) { this.classList.add(error); loginAccountError.textContent 请输入用户名或手机号; loginAccountError.classList.add(show); } else { this.classList.remove(error); loginAccountError.classList.remove(show); } }); } if (loginPasswordInput) { loginPasswordInput.addEventListener(blur, function() { if (!this.value.trim()) { this.classList.add(error); loginPasswordError.textContent 请输入密码; loginPasswordError.classList.add(show); } else { this.classList.remove(error); loginPasswordError.classList.remove(show); } }); } // 登录提交 const loginSubmit document.getElementById(login-submit); if (loginSubmit) { loginSubmit.addEventListener(click, async function() { const account loginAccountInput.value.trim(); const password loginPasswordInput.value.trim(); let hasError false; if (!account) { loginAccountInput.classList.add(error); loginAccountError.textContent 请输入用户名或手机号; loginAccountError.classList.add(show); hasError true; } if (!password) { loginPasswordInput.classList.add(error); loginPasswordError.textContent 请输入密码; loginPasswordError.classList.add(show); hasError true; } if (hasError) return; // 显示加载状态 const originalText this.textContent; this.textContent 登录中...; this.disabled true; try { const result await userManager.login(account, password); if (result.success) { initUserInterface(); hideLoginPage(); showUserPage(); showToast(登录成功!); } else { alert(result.message || 登录失败); } } catch (error) { console.error(登录错误:, error); alert(网络错误,请稍后重试); } finally { // 恢复按钮状态 this.textContent originalText; this.disabled false; } }); } // 注册表单验证 const registerUsernameInput document.getElementById(register-username); const registerPhoneInput document.getElementById(register-phone); const registerPasswordInput document.getElementById(register-password); const registerConfirmPasswordInput document.getElementById(register-confirm-password); const registerUsernameError document.getElementById(register-username-error); const registerPhoneError document.getElementById(register-phone-error); const registerPasswordError document.getElementById(register-password-error); const registerConfirmPasswordError document.getElementById(register-confirm-password-error); // 用户名验证 if (registerUsernameInput) { registerUsernameInput.addEventListener(blur, function() { const username this.value.trim(); const usernameRegex /^\u4e00-\u9fa5a-zA-Z0-9_{2,20}$/; if (!username) { this.classList.add(error); registerUsernameError.textContent 请输入用户名; registerUsernameError.classList.add(show); } else if (!usernameRegex.test(username)) { this.classList.add(error); registerUsernameError.textContent 用户名格式不正确(2-20位,支持中文、英文、数字和下划线); registerUsernameError.classList.add(show); } else { this.classList.remove(error); registerUsernameError.classList.remove(show); } }); } // 手机号验证 if (registerPhoneInput) { registerPhoneInput.addEventListener(blur, function() { const phone this.value.trim(); const phoneRegex /^13-9\d{9}$/; if (!phone) { this.classList.add(error); registerPhoneError.textContent 请输入手机号; registerPhoneError.classList.add(show); } else if (!phoneRegex.test(phone)) { this.classList.add(error); registerPhoneError.textContent 请输入正确的11位手机号; registerPhoneError.classList.add(show); } else { this.classList.remove(error); registerPhoneError.classList.remove(show); } }); } // 密码验证 if (registerPasswordInput) { registerPasswordInput.addEventListener(blur, function() { const password this.value.trim(); if (!password) { this.classList.add(error); registerPasswordError.textContent 请输入密码; registerPasswordError.classList.add(show); } else if (password.length 6 || password.length > 12) { this.classList.add(error); registerPasswordError.textContent 密码长度应为6-12位; registerPasswordError.classList.add(show); } else { this.classList.remove(error); registerPasswordError.classList.remove(show); } }); } // 确认密码验证 if (registerConfirmPasswordInput) { registerConfirmPasswordInput.addEventListener(blur, function() { const password registerPasswordInput.value.trim(); const confirmPassword this.value.trim(); if (!confirmPassword) { this.classList.add(error); registerConfirmPasswordError.textContent 请确认密码; registerConfirmPasswordError.classList.add(show); } else if (password ! confirmPassword) { this.classList.add(error); registerConfirmPasswordError.textContent 两次输入的密码不一致; registerConfirmPasswordError.classList.add(show); } else { this.classList.remove(error); registerConfirmPasswordError.classList.remove(show); } }); } // 注册提交 const registerSubmit document.getElementById(register-submit); if (registerSubmit) { registerSubmit.addEventListener(click, async function() { const username registerUsernameInput.value.trim(); const phone registerPhoneInput.value.trim(); const password registerPasswordInput.value.trim(); const confirmPassword registerConfirmPasswordInput.value.trim(); const phoneRegex /^13-9\d{9}$/; let hasError false; if (!username) { registerUsernameInput.classList.add(error); registerUsernameError.textContent 请输入用户名; registerUsernameError.classList.add(show); hasError true; } if (!phone) { registerPhoneInput.classList.add(error); registerPhoneError.textContent 请输入手机号; registerPhoneError.classList.add(show); hasError true; } else if (!phoneRegex.test(phone)) { registerPhoneInput.classList.add(error); registerPhoneError.textContent 请输入正确的11位手机号; registerPhoneError.classList.add(show); hasError true; } if (!password) { registerPasswordInput.classList.add(error); registerPasswordError.textContent 请输入密码; registerPasswordError.classList.add(show); hasError true; } else if (password.length 6 || password.length > 12) { registerPasswordInput.classList.add(error); registerPasswordError.textContent 密码长度应为6-12位; registerPasswordError.classList.add(show); hasError true; } if (!confirmPassword) { registerConfirmPasswordInput.classList.add(error); registerConfirmPasswordError.textContent 请确认密码; registerConfirmPasswordError.classList.add(show); hasError true; } else if (password ! confirmPassword) { registerConfirmPasswordInput.classList.add(error); registerConfirmPasswordError.textContent 两次输入的密码不一致; registerConfirmPasswordError.classList.add(show); hasError true; } if (hasError) return; // 显示加载状态 const originalText this.textContent; this.textContent 注册中...; this.disabled true; try { const result await userManager.register(username, phone, password); if (result.success) { initUserInterface(); hideLoginPage(); showUserPage(); showToast(注册成功!); } else { alert(result.message || 注册失败); } } catch (error) { console.error(注册错误:, error); alert(网络错误,请稍后重试); } finally { // 恢复按钮状态 this.textContent originalText; this.disabled false; } }); } // 上传头像 const uploadAvatarBtn document.getElementById(upload-avatar-btn); if (uploadAvatarBtn) { uploadAvatarBtn.addEventListener(click, function() { document.getElementById(avatar-upload).click(); }); } const avatarUpload document.getElementById(avatar-upload); if (avatarUpload) { avatarUpload.addEventListener(change, async function(e) { const file e.target.files0; if (file) { // 显示加载状态 const uploadBtn document.getElementById(upload-avatar-btn); const originalText uploadBtn.textContent; uploadBtn.textContent 上传中...; uploadBtn.disabled true; try { const reader new FileReader(); reader.onload async function(event) { const result await userManager.uploadAvatar(event.target.result); if (result.success) { document.getElementById(user-avatar).src result.avatar_url; document.getElementById(edit-avatar-preview).src result.avatar_url; showToast(头像更新成功); } else { showToast(result.message, true); } }; reader.readAsDataURL(file); } catch (error) { console.error(头像上传错误:, error); showToast(上传失败,请重试, true); } finally { // 恢复按钮状态 uploadBtn.textContent originalText; uploadBtn.disabled false; } } }); } // 保存用户名 const saveUsername document.getElementById(save-username); if (saveUsername) { saveUsername.addEventListener(click, async function() { const newUsername document.getElementById(edit-username).value.trim(); const usernameRegex /^\u4e00-\u9fa5a-zA-Z0-9_{2,20}$/; if (!newUsername) { alert(请输入用户名); return; } if (!usernameRegex.test(newUsername)) { alert(用户名格式不正确(2-20位,支持中文、英文、数字和下划线)); return; } // 显示加载状态 const originalText this.textContent; this.textContent 保存中...; this.disabled true; try { const result await userManager.updateUser({ username: newUsername }); if (result.success) { // 重新获取用户数据 const updatedUser userManager.getCurrentUser(); userManager.setCurrentUser(updatedUser); initUserInterface(); showUserPage(); editModal.classList.remove(active); showToast(用户名更新成功); } else { alert(result.message || 更新失败); } } catch (error) { console.error(用户名更新错误:, error); alert(网络错误,请稍后重试); } finally { // 恢复按钮状态 this.textContent originalText; this.disabled false; } }); } // 保存密码 const savePassword document.getElementById(save-password); if (savePassword) { savePassword.addEventListener(click, function() { const oldPassword document.getElementById(old-password).value.trim(); const newPassword document.getElementById(new-password).value.trim(); const confirmPassword document.getElementById(confirm-password).value.trim(); if (!oldPassword) { alert(请输入旧密码); return; } if (!newPassword) { alert(请输入新密码); return; } if (newPassword.length 6 || newPassword.length > 12) { alert(新密码长度应为6-12位); return; } if (newPassword ! confirmPassword) { alert(两次输入的密码不一致); return; } // 这里需要调用API来修改密码,暂时先提示 alert(密码修改功能暂未实现); editModal.classList.remove(active); }); } // 兑换码功能 - 简化版本 const redeemButton document.getElementById(redeem-button); if (redeemButton) { redeemButton.addEventListener(click, async function() { const code document.getElementById(code-input).value.trim(); if (!code) { alert(请输入兑换码); return; } // 显示加载状态 const originalText this.textContent; this.textContent 兑换中...; this.disabled true; try { const result await userManager.useRedeemCode(code); if (result.success) { console.log(兑换成功,完整结果:, result); // 清空输入框 document.getElementById(code-input).value ; // 显示成功消息 let rewardMessage 兑换成功!; if (result.type anniversary) { rewardMessage 成功兑换三周年礼包!获得三周年头像框、主题和称号; } else if (result.type vip) { rewardMessage 成功兑换VIP会员!获得VIP头像框、主题和称号; } showToast(rewardMessage); // 立即更新界面 if (result.user) { console.log(使用返回的用户数据更新界面); // 重新渲染用户页面 showUserPage(); // 应用新主题 applyUserTheme(result.user.current_theme); // 更新头像框 updateAvatarFrame(result.user.current_frame); console.log(界面更新完成); } } else { alert(result.message || 兑换失败); } } catch (error) { console.error(兑换错误:, error); alert(网络错误,请稍后重试); } finally { // 恢复按钮状态 this.textContent originalText; this.disabled false; } }); } // 登出 const logoutButton document.getElementById(logout-button); if (logoutButton) { logoutButton.addEventListener(click, function() { userManager.logout(); initUserInterface(); hideUserPage(); applyUserTheme(default); updateAvatarFrame(default); showToast(已成功登出); }); } } /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]