0%
boxmoe_header_banner_img

加载中

「盒子萌Lolimeow」主题二创「纸鸢版🕊️更新」与「🗼开发笔记」


avatar
白木 2025年8月27日 2026年2月13日 1.62k

🎯 登录页面双面板设计与功能优化

文件位置: page/p-signin.php · core/module/fun-user.php · assets/js/login-particles.js

🎯 优化目标

将登录页面重构为双面板设计,优化按钮样式和交互效果,修复注册功能,恢复粒子效果,并确保所有元素样式统一美观。

🔧 实现方法

采用双面板设计,使用CSS过渡实现平滑切换,优化按钮样式和交互效果,修复注册功能,恢复粒子效果,并确保所有元素样式统一。

✏️ 具体修改内容

  1. 双面板设计与切换功能 (p-signin.php):

- 重构登录页面为双面板设计,包含登录和注册模块
- 添加根据URL参数自动切换模块功能,支持?mode=signup参数
- 优化面板切换动画,使用CSS过渡实现平滑效果
- 统一按钮样式,确保文字居中显示
- 修复按钮悬停扫光动画,改为流畅斜角效果

  1. 注册功能修复 (p-signin.php · fun-user.php):

- 添加密码确认字段,确保注册表单提交完整数据
- 修复服务器端注册处理函数,确保密码确认验证通过
- 优化注册表单样式,统一输入框大小
- 修复注册表单提交逻辑,确保数据正确发送到服务器

  1. 粒子效果恢复 (login-particles.js · p-signin.php):

- 修改粒子效果脚本,将canvas添加到main标签中,避免被CSS规则隐藏
- 调整粒子效果的z-index,确保显示在背景之上,容器之下
- 移除不必要的粒子效果容器,简化代码结构

  1. 版权信息添加 (p-signin.php):

- 在登录页面底部添加主题版权信息
- 动态获取主题名称和版本号
- 添加白木重构链接,颜色设置为深蓝色
- 确保版权信息在页面底部居中显示

  1. 样式统一优化 (p-signin.php):

- 统一所有按钮样式,确保文字居中显示
- 加宽按钮长度5px,提升视觉效果
- 修复注册模块输入框大小不一问题,统一输入框宽度
- 优化输入框样式,使用浮动标签设计
- 确保所有元素响应式设计,适配不同屏幕尺寸

🎨 实现效果

  • ✅ 登录页面双面板设计,支持平滑切换
  • ✅ 根据URL参数自动切换登录/注册模块
  • ✅ 按钮样式优化,悬停扫光动画流畅美观
  • ✅ 注册功能修复,支持密码确认验证
  • ✅ 粒子效果恢复,背景动态效果丰富
  • ✅ 版权信息正确显示,包含主题名称和版本号
  • ✅ 所有元素样式统一,输入框大小一致
  • ✅ 响应式设计,适配不同屏幕尺寸
  • ✅ 按钮文字居中显示,视觉效果协调
  • ✅ 重构链接正确显示,颜色为深蓝色




🌟 重构404页面

文件位置: 404.php · assets/404/shiroki-404.css · assets/404/shiroki-404.js

  • 功能描述:全面优化404页面,包括本地资源替换、动画效果添加和交互体验增强
  • 实现内容

1. 本地资源替换
- 将tsParticles CDN链接替换为本地文件:assets/404/tsparticles.preset.fountain.bundle.min.js
- 提高加载速度,减少外部依赖,增强离线可用性
- 引入自定义404页面JS文件:assets/404/shiroki-404.js

2. 动画效果添加
- 为路线图标添加上下浮动动画,持续时间3秒,缓动效果ease-in-out
- CSS动画名称:float-up-down,实现上下10px的浮动效果
- 集成tsParticles粒子背景效果,增强页面视觉层次感

3. 交互体验增强
- 为h1标题添加从中间展开的粉色覆盖效果
- 使用clip-path::before伪元素实现,过渡时间0.5秒
- 实现原理:通过clip-path: inset(0 50% 0 50%)clip-path: inset(0 0 0 0)的过渡
- 按钮添加渐变背景和悬停动画效果
- 按钮文字与站点Logo结合,增强品牌识别

4. 字体同步优化
- 确保404页面同步后台设置的站点默认字体
- 完整复制主题字体处理逻辑,支持自定义字体上传和应用
- 遵循boxmoe_custom_font_switch开关设置
- 修复动态字体被CSS硬编码覆盖的问题:
- 在动态字体CSS中添加!important确保优先级
- 从CSS文件中移除硬编码的font-family
- 添加字体CSS应用代码,确保字体样式正确应用到页面

5. 响应式设计优化
- 针对移动端和桌面端分别优化字体大小和元素尺寸
- 使用CSS变量管理不同屏幕尺寸的样式
- 调整布局结构,确保在各种设备上都有良好的显示效果

6. 视觉设计增强
- 使用渐变色彩方案,增强页面现代感
- 添加平滑的过渡效果,提升用户体验
- 优化图标和图片的显示效果

7. 性能优化
- 内联关键CSS,减少HTTP请求
- 优化资源加载顺序
- 确保页面在各种网络环境下都能快速加载

8. 代码清理与优化
- 将HTML内容转换为纯PHP格式,方便扩展和维护
- 删除多余的背景图相关代码,简化代码结构
- 优化CSS样式,移除无效的样式设置
- 添加min-height: 100vh确保页面全屏显示

9. 安全与稳定性
- 添加安全检查,防止直接访问主题文件
- 使用esc_url()esc_attr()等函数确保输出安全
- 优化错误处理,确保页面在各种情况下都能正常显示




📋 代码块样式优化

文件位置: assets/css/style.css

  • 功能描述:优化代码块样式,确保字体同步站点字体,增大字体大小,添加留白间距
  • 实现内容

1. 字体大小调整
- 将代码块字体大小从原默认值调整为16px,提高可读性
- 确保行内代码和带有行号的代码块使用相同的字体大小

2. 字体同步修复
- 原代码硬编码使用固定字体,无法继承站点自定义字体设置
- 将所有代码块相关CSS选择器的font-family改为inheritinherit !important
- 确保当后台主题设置的自定义字体开启时,代码块字体会自动同步

3. 留白间距添加
- 修复代码块第一行和最后一行文本太贴边的问题
- 为.post-single pre.prettyprint ol.linenums添加padding: 8px 0
- 为.post-single pre.prettyprint添加padding: 40px 10px 10px
- 为.post-single pre添加padding: 10px

4. CSS选择器优化
- .single-content code: 将字体设置为inherit
- .post-single pre: 将字体设置为inherit
- .post-single pre.prettyprint: 将字体设置为inherit
- .post-single pre.prettyprint code: 将字体设置为inherit !important
- .post-single pre.prettyprint ol.linenums: 将字体设置为inherit
- .post-single pre.prettyprint ol.linenums li: 将字体设置为inherit
- .post-single pre.prettyprint, .post-single pre.prettyprint *: 将字体设置为inherit !important

技术实现

/* 代码块字体同步优化 */
.single-content code {
    font-family: inherit;
    font-size: 16px;
}

.post-single pre,
.post-single pre.prettyprint,
.post-single pre.prettyprint ol.linenums,
.post-single pre.prettyprint ol.linenums li {
    font-family: inherit;
    font-size: 16px;
}

.post-single pre.prettyprint code,
.post-single pre.prettyprint,
.post-single pre.prettyprint * {
    font-family: inherit !important;
    font-size: 16px;
}

/* 代码块留白间距优化 */
.post-single pre {
    padding: 10px;
}

.post-single pre.prettyprint {
    padding: 40px 10px 10px;
}

.post-single pre.prettyprint ol.linenums {
    padding: 8px 0;
}

优化效果

  • 代码块字体大小统一为16px,提高可读性
  • 当后台主题设置的自定义字体开启时,代码块字体会自动同步
  • 代码块第一行和最后一行文本有了足够的留白间距,不再贴边
  • 所有类型的代码块(包括行内代码和带有行号的代码块)都应用了相同的优化样式




🧑🏻‍💻 代码块样式优化

文件位置: assets/css/style.css · core/module/fun-fonts.php

  • 功能描述:优化文章页代码块样式,提高可读性,同步站点自定义字体,修复留白问题
  • 实现内容

1. 字体同步优化
- 将代码块字体从硬编码值改为 inherit,继承站点自定义字体设置
- 确保后台主题设置的自定义字体开启时,代码块字体同步更新
- 支持经典编辑器和 Gutenberg 编辑器的字体设置

2. 字体大小优化
- 初始调整:calc(0.8rem - 3px) → 0.75rem → 16px
- 最终确定为 16px,确保代码可读性
- 所有代码块元素统一字体大小

3. 留白间距优化
- 修复第一行和最后一行代码文本贴边问题
- 添加 10px 内边距,确保代码与边框有适当间距
- 优化代码块整体视觉效果

4. 选择器修正
- 修复 CSS 选择器缺少 . 前缀的问题
- 确保所有代码块相关元素都被正确选中

技术实现

/* 代码块字体同步优化 */
.single-content code {
    font-family: inherit;
    font-size: 16px;
}
.post-single pre,
.post-single pre.prettyprint,
.post-single pre.prettyprint ol.linenums,
.post-single pre.prettyprint ol.linenums li {
    font-family: inherit;
    font-size: 16px;
}
/* 代码块留白间距优化 */
.post-single pre {
    padding: 10px;
}

优化效果

  • ✅ 代码块字体成功同步站点自定义字体设置
  • ✅ 字体大小调整为 16px,提高代码可读性
  • ✅ 代码块内边距增加,解决文本贴边问题
  • ✅ 所有代码块元素样式统一
  • ✅ 支持后台主题字体设置的动态变化





🚀 页面缓存头设置修复

文件位置: functions.php

  • 功能描述:解决"未检测到页面缓存"问题,添加必要的缓存相关HTTP头
  • 实现内容

- 添加 shiroki_add_cache_headers() 函数,为前端页面添加缓存头
- 设置 Cache-Control 头:public, max-age=3600(缓存1小时)
- 设置 Expires 头:1小时后过期
- 设置 Last-Modified 头:基于最后文章修改时间
- 设置 ETag 头:唯一标识
- 设置 X-Cache-Enabled: true 自定义缓存启用标识
- 使用 send_headers 钩子绑定缓存头设置函数

🔧 函数名冲突修复

文件位置: functions.php

  • 问题描述is_login() 函数与WordPress核心函数冲突,导致致命错误
  • 修复内容

- 将 is_login() 重命名为 shiroki_is_login()
- 将 is_logout() 重命名为 shiroki_is_logout()
- 更新 shiroki_add_cache_headers() 函数中对这两个函数的调用
- 遵循WordPress最佳实践,使用前缀避免函数名冲突




👤 登录注册页面优化

文件位置: page/p-signin.php · assets/css/mobile-signin-shiroki.css

  • 功能描述:优化登录注册页面的移动端适配和用户体验
  • 实现内容

1. 移动端样式独立化
- 创建独立的移动端样式文件 mobile-signin-shiroki.css
- 采用响应式设计,适配870px以下屏幕
- 实现顶部半圆设计,覆盖顶部区域
- 调整表单布局,确保在小屏幕上正常显示

2. 浮动标签优化
- 修复默认状态下标签偏下问题,确保垂直居中
- 将默认状态下的背景色从半透明白色改为完全透明
- 优化激活状态下的标签样式,添加背景色和圆角
- 确保桌面端和移动端标签样式一致

3. 验证码按钮修复
- 修复验证码按钮被表单盖住的问题,设置 z-index: 10
- 确保按钮垂直居中显示
- 为验证码输入框添加足够的右侧内边距
- 优化按钮样式,与整体设计保持一致

4. 表单提交失败样式修复
- 修复表单提交失败时输入框内容偏移的bug
- 将错误信息定位在输入框下方,不影响输入框布局
- 为表单容器添加最小高度,确保错误信息不影响整体布局
- 优化错误信息样式,提高可读性

5. 小屏幕滚动优化
- 为屏幕高度低于690px的设备添加表单滚动功能
- 增强滚动条可见性,优化滚动体验
- 确保注册表单可以独立滚动,避免内容被截断

6. 按钮样式优化
- 修复GO按钮被压扁的问题,设置固定高度
- 将扫光效果放在按钮内部,优化视觉体验
- 增强按钮交互效果,添加悬停动画

技术实现

/* 🌟 移动端独立样式 */
@media screen and (max-width: 870px) {
    /* 移动端整体布局重置 */
    html, body, main {
        width: 100% !important;
        height: 100% !important;
        overflow: hidden !important;
        position: fixed !important;
    }
    
    /* 顶部半圆设计 */
    .container::before {
        width: 120% !important;
        height: 40% !important;
        top: -15% !important;
        left: 50% !important;
        transform: translateX(-50%) !important;
        border-radius: 0 0 50% 50% / 0 0 100% 100% !important;
    }
    
    /* 浮动标签优化 */
    .floating-label-group label {
        background: transparent !important;
        padding: 0 8px !important;
        transform: translateY(-55%) !important;
    }
    
    /* 激活状态样式 */
    .floating-label-group .form-control:focus ~ label,
    .floating-label-group .form-control:not(:placeholder-shown) ~ label {
        background: rgba(255, 255, 255, 0.95) !important;
        border-radius: 4px !important;
    }
    
    /* 小屏幕滚动优化 */
    @media screen and (max-height: 690px) {
        .forms-container {
            height: 360px !important;
            overflow: hidden !important;
        }
        
        form {
            overflow-y: auto !important;
        }
    }
}




⏰ 修复时钟小部件

文件位置: core/widgets/widget-clock.php · assets/js/admin-select-ui.js

  • 问题描述

1. 时钟小部件不显示完整的星期几,只显示部分字符
2. 时钟小部件的时区下拉框无法点击
3. 时钟小部件的时间文本没有同步自定义的站点默认字体

  • 修复内容

1. 星期显示修复
- 原代码使用正则表达式只匹配2个字符的星期,导致完整星期名称被截断
- 改为直接使用 Intl.DateTimeFormat API分别获取年、月、日和完整星期名称
- 使用 toLocaleString 方法获取各日期组件,确保星期名称完整显示
- 组合成 YYYY-MM-DD 星期X 格式的日期字符串

2. 时区下拉框修复
- 主题使用自定义的下拉框UI插件替换原生select元素
- 插件没有监听WordPress小部件编辑界面的特殊事件
- 添加对 widget-addedwidget-updated 事件的监听
- 确保动态加载的小部件能正确初始化下拉框

3. 字体同步修复
- 原代码硬编码使用 boxmoe 字体,无法继承站点自定义字体设置
- 添加获取自定义字体设置的逻辑
- 修改时间文本的字体设置,使用动态获取的字体
- 保持原有的字体回退机制

  • 技术实现
// 星期显示修复
  var year = now.toLocaleString('zh-CN', { year: 'numeric', timeZone: timezone });
  var month = now.toLocaleString('zh-CN', { month: '2-digit', timeZone: timezone });
  var day = now.toLocaleString('zh-CN', { day: '2-digit', timeZone: timezone });
  var weekday = now.toLocaleString('zh-CN', { weekday: 'long', timeZone: timezone });
  var dateString = year + '-' + month + '-' + day + ' ' + weekday;
  
  // 时区下拉框修复
  $(document).on('widget-added widget-updated', function(e, widget) {
      setTimeout(function() {
          initBoxmoeSelect();
      }, 200);
  });
  
// 字体同步修复
  $default_font = get_boxmoe('boxmoe_default_font');
  $font_family = $default_font && $default_font !== 'default' ? $default_font : 'boxmoe';
  
  // 在CSS中使用动态字体
  font-family: "<?php echo $font_family; ?>", monospace !important;
  




🚀 修复主题后台重置功能

📋 优化过程

第一阶段:问题诊断
  • 问题描述:【重置所有设置】按钮完全没反应,卡在【正在重置】状态
  • 初步分析:WordPress设置API冲突、类加载问题、重定向问题
第二阶段:多重解决方案
  • 方案一:修复原始重置按钮的JavaScript事件处理
  • 方案二:创建独立的重置处理文件,绕过WordPress设置API
  • 方案三:添加缓存机制,优化默认值获取
  • 方案四:使用预定义默认值,避免动态获取
第三阶段:性能优化
  • 速度提升:从10-30秒缩短到1-3秒
  • 用户体验:添加进度条和状态提示
  • 界面简化:将【极快重置】设为主要按钮

🎯 最终解决方案

核心文件
  1. super-fast-reset.php:超高效重置处理文件

- 使用预定义默认值,避免动态获取
- 1-3秒完成重置操作

  1. class-options-framework-admin.php:主题设置页面

- 添加【🚀 极快重置(推荐)】按钮
- 移除其他测试按钮,简化界面

  1. options-custom.js:JavaScript处理文件

- 包含superFastResetFunction函数
- 精确的成功消息检测逻辑

🔧 技术实现细节

超快重置处理流程

// 检测重置请求
$isResetRequest = (isset($_POST['direct_reset']) && $_POST['direct_reset'] === '1') ||
                 (isset($_POST['reset']) && $_POST['reset'] === '1') ||
                 (isset($_POST['reset_flag']) && $_POST['reset_flag'] === '1');

// 使用预定义默认值
$default_settings = array(
    'boxmoe_basics_logo' => '',
    'boxmoe_basics_favicon' => '',
    // ... 其他设置
);

// 直接更新数据库
update_option($option_name, $default_settings);

// 正确重定向
$redirect_url = admin_url('admin.php?page=boxmoe_options');
header('Location: ' . $redirect_url);
JavaScript处理逻辑
// 确认对话框
if (!confirm('警告:点击确定,之前所有设置修改都将丢失!\n\n这是超快重置,使用预定义默认值,速度极快!')) {
    return false;
}

// 显示加载提示
var loadingHtml = '<div id="shiroki-reset-loading">...</div>';
$('body').append(loadingHtml);

// 创建表单并提交
var $form = $('<form>', {
    'action': themeUri + '/super-fast-reset.php',
    'method': 'POST',
    'target': '_self'
});

// 添加重置标志
$('<input>', {
    'type': 'hidden',
    'name': 'reset',
    'value': '1'
}).appendTo($form);

// 提交表单
$form.appendTo('body').submit();
成功消息检测
// 只有在真正重置成功后才显示消息
var urlParams = new URLSearchParams(window.location.search);
var isResetSuccess = urlParams.get('reset') === 'success';

if (isResetSuccess) {
    // 显示成功消息
    $('#message').remove();
    var successHtml = '<div id="message" class="updated fade"><p><strong>✅ 已恢复默认选项!</strong></p></div>';
    $('.wrap h2').after(successHtml);
    
    // 移除URL参数,避免刷新时重复显示
    var newUrl = window.location.pathname + window.location.search.replace(/[?&]reset=success/, '');
    window.history.replaceState({}, document.title, newUrl);
    
    // 5秒后自动隐藏消息
    setTimeout(function() {
        $('#message').fadeOut();
    }, 5000);
}

🎨 重置按钮样式优化

📋 需求描述
  • 按钮背景色:将重置按钮背景色改为红色
  • 按钮对齐:将重置按钮显示靠左对齐
  • 代码清理:删除测试相关代码
🔧 实现过程
第一阶段:样式修改
  1. CSS文件修改 (optionsframework.css)
/* 🚀 超快重置按钮样式 - 红色背景和左对齐 */
   #super-fast-reset-button {
       background-color: #ff4d4f !important;
       border-color: #ff4d4f !important;
       color: #fff !important;
       float: left !important;
       margin-right: 10px;
   }
   #super-fast-reset-button:hover {
       background-color: #ff7875 !important;
       border-color: #ff7875 !important;
   }
   
  1. PHP文件修改 (class-options-framework-admin.php)

- 调整按钮顺序,将重置按钮放在保存按钮之前
- 确保按钮能够正确应用左对齐样式

第二阶段:代码清理
  1. 删除测试代码 (options-custom.js)

- 删除 testResetFunction 函数
- 删除重复的 superFastResetFunction 函数定义
- 保留第一个更完整的函数版本




🎵 重构音乐播放器

📋 功能概述

音乐播放器基于 APlayer 和 MetingJS 实现,支持多音乐平台(网易云、QQ音乐等),具有以下核心功能:

  • 🎵 多音乐平台支持(网易云、QQ音乐等)
  • 🔄 多API源自动切换
  • 🎼 歌词显示与同步
  • 📋 歌单管理
  • 🔊 音量控制
  • 🎚️ 播放进度控制
  • 🌆 暗色模式适配
  • 📱 移动端响应式设计
  • 🎵 音乐控制弹窗

🔧 技术架构

核心文件结构
wp-content/themes/lolimeow-shiroki/
├── core/module/
│   ├── fun-music.php                          # 🎵 音乐播放器核心模块
│   └── fun-music-popup-shiroki.php            # 🎵 音乐播放器弹窗菜单模块
└── assets/js/music-player/
    ├── APlayer.min.js                         # APlayer 核心库
    ├── Meting.min.js                          # MetingJS API 库
    ├── aplayer-lyrics-fix.js                  # 歌词修复脚本
    ├── shiroki-music-api-manager.js           # API 管理器
    └── shiroki-music-error-handler.js         # 错误处理器

🎵 核心功能模块

音乐播放器初始化模块(fun-music.php)

功能特点

  • ✅ 支持多音乐平台(网易云、QQ音乐等)
  • ✅ 多API源配置,提高可用性
  • ✅ 自定义API接口支持
  • ✅ 歌词显示支持

API源配置

$api_urls = array(
    'api_injahow' => 'https://api.injahow.cn/meting/',
    'api_imeto' => 'https://api.i-meto.com/meting/api',
    'api_ihuan' => 'https://meting-api.ihuan.me/api',
    'api_github' => 'https://api-meting.github.io/api',
    'api_chuyel' => 'https://musicapi.chuyel.top/meting/api'
);

核心功能

  • 🎵 加载 APlayer 和 MetingJS 核心库
  • 🎵 注册音乐播放器样式
  • 🎵 输出播放器 HTML 标签
  • 🎵 配置多个备用API源
  • 🎵 支持自定义API接口

关键代码位置

音乐控制弹窗模块(fun-music-popup-shiroki.php)

功能特点

  • 🎼 三列布局设计(歌词、控制、歌单)
  • 🎵 实时歌词同步显示
  • 📋 完整的歌单管理
  • 🔊 音量控制(支持拖拽)
  • 🎚️ 播放进度控制
  • 📱 移动端响应式适配
  • 🌆 暗色模式支持

三列布局结构

┌─────────────────────────────────────────────────────┐
│ 💿 音乐控制窗口                        ×            │
├─────────────┬──────────────────┬─────────────────────┤
│  🎼 歌词    │  🪗 歌曲信息     │  📋 歌单           │
│             │  🎚️ 播放控制     │                    │
│  歌词显示   │  🎶 播放进度     │  歌曲列表          │
│  实时同步   │  🔊 音量控制     │  点击切换          │
└─────────────┴──────────────────┴─────────────────────┘

核心功能

  • 🎵 点击播放器显示弹窗
  • 🎵 歌词实时同步高亮
  • 🎵 歌单点击切换歌曲
  • 🎵 播放控制(上一首、播放/暂停、下一首)
  • 🎵 进度条拖拽跳转
  • 🎵 音量条拖拽调节
  • 🎵 静音切换
  • 🎵 ESC键关闭弹窗

关键代码位置

API管理器(shiroki-music-api-manager.js)

功能特点

  • 🔄 自动API源切换
  • 🎵 检测音乐源加载失败
  • 📢 切换通知提示
  • 🎯 智能跳过自定义API

核心功能

  • 🎵 监听APlayer错误事件
  • 🎵 自动切换到下一个可用API
  • 🎵 添加API切换按钮
  • 🎵 显示切换通知
  • 🎵 重新加载播放器

API切换逻辑

// 如果当前使用的是自定义API,则切换到第一个备用API
if (window.shirokiCustomAPI && this.apis[currentApiIndex] === window.shirokiCustomAPI) {
    currentApiIndex = 0;
} else {
    // 更新当前API索引
    currentApiIndex = (currentApiIndex + 1) % this.apis.length;
}

关键代码位置

错误处理器(shiroki-music-error-handler.js)

功能特点

  • 🎵 监控APlayer错误
  • 📢 用户友好的错误提示
  • 🔄 自动修复尝试
  • 📊 错误报告生成

核心功能

  • 🎵 监听全局错误事件
  • 🎵 监听Promise错误
  • 🎵 监控APlayer音频错误
  • 🎵 显示用户友好的错误提示
  • 🎵 自动切换API源修复
  • 🎵 添加加载指示器

错误处理逻辑

// 检查是否是音乐相关错误
if (this.isMusicRelatedError(errorMessage)) {
    console.warn(`🎵 音乐播放器错误 [${source}]:`, errorMessage);
    // 显示用户友好的错误提示
    this.showUserFriendlyError(errorMessage, source);
    // 尝试自动修复
    this.attemptAutoFix(errorMessage);
}

关键代码位置

🎨 样式设计

暗色模式适配
/* 🌆 暗色模式样式 */
.dark-theme .music-popup-content {
    background-color: #1a1d23;
    border-color: #33363d;
}

.dark-theme .progress-inner {
    background: linear-gradient(90deg, #a78bfa, #c4b5fd);
    box-shadow: 0 0 15px rgba(167, 139, 250, 0.6);
}
移动端适配
/* 📱 移动端上下布局 */
@media (max-width: 768px) {
    .music-layout {
        flex-direction: column;
        gap: 16px;
    }
    
    /* 音乐控制区域在移动端置顶 */
    .music-control-section {
        order: -1;
        background-color: rgba(139, 61, 255, 0.1);
    }
}

🔧 使用方法

基本配置

在主题设置中配置:

  • 音乐开关:启用/禁用音乐播放器
  • 音乐平台:选择音乐平台(网易云、QQ音乐等)
  • 歌单ID:输入歌单ID
  • 播放顺序:选择播放顺序(列表、随机)
  • API源:选择API源或自定义API
弹窗控制
  • 点击播放器任意位置打开控制弹窗
  • 点击弹窗外部或按ESC键关闭弹窗
  • 点击API切换按钮切换音乐源

🎯 核心技术点

APlayer实例获取

使用多种方式获取APlayer实例,确保兼容性:

function getAplayerInstance() {
    // 直接从DOM元素获取
    const aplayerElement = document.querySelector(".aplayer");
    if (aplayerElement && aplayerElement.aplayer) {
        return aplayerElement.aplayer;
    }
    
    // 从全局变量获取
    if (window.aplayers && window.aplayers.length > 0) {
        return window.aplayers[0];
    }
    
    // ... 更多方法
}
歌词同步
// 更新当前歌词高亮
function updateCurrentLyrics(currentTime) {
    const lyricsLines = lyricsElement.querySelectorAll(".lyrics-line[data-time]");
    
    for (let i = 0; i < lyricsLines.length; i++) {
        const time = parseFloat(lyricsLines[i].getAttribute("data-time"));
        if (time <= currentTime) {
            activeIndex = i;
        } else {
            break;
        }
    }
    
    // 滚动到当前歌词
    lyricsLines[activeIndex].scrollIntoView({ behavior: "smooth", block: "center" });
}
音量控制防冲突
// 添加变量跟踪用户设置的音量,防止被自动更新覆盖
let userSetVolume = null;
let isUpdatingVolume = false;

// 处理音量条点击和拖拽
function handleVolumeInteraction(e) {
    isUpdatingVolume = true;
    setVolume(percent);
    
    // 延迟重置更新标志,防止定期更新覆盖用户设置
    setTimeout(() => {
        isUpdatingVolume = false;
    }, 2000);
}

🏹 修复APlayer音乐播放器箭头图标不显示的问题

修复的关键文件[assets/css/music-player/aplayer-miniswitcher-fix-shiroki.css]

🎵 特色功能

多API源自动切换
  • 配置5个备用API源
  • 检测到加载失败自动切换
  • 显示切换通知提示
歌词实时同步
  • 从API获取歌词
  • 实时高亮当前歌词
  • 自动滚动到当前行
  • 支持手动刷新歌词
完整的歌单管理
  • 显示完整歌单列表
  • 点击切换歌曲
  • 高亮当前播放歌曲
  • 显示歌曲时长
移动端优化
  • 响应式三列布局
  • 移动端上下布局
  • 控制区域置顶
  • 触摸友好的按钮大小




感谢您的支持
微信赞赏

微信扫一扫

支付宝赞赏

支付宝扫一扫



评论(2)

查看评论列表
评论头像
小笨蛋 2026年01月13日
赞!
评论头像
小笨蛋 2026年01月13日
不错不错ツ

发表评论

表情 颜文字
插入代码

北京时间 (Asia/Shanghai)

后退
前进
刷新
复制
粘贴
全选
删除
返回首页
0%
目录
顶部
底部
📖 文章导读