Files
wx_pbzc/utils/darkMode.js
T
lc 6176f2c341 feat(ui): 记录页月份联动与多项 UI 美化/修复
- records: 底部列表与月份选择器联动,新增 [本月|最近] 分段控件;标题/空态随模式切换
- leaderboard: 领奖台布局(冠军居中+皇冠)、次数标注于底座且三档水平对齐;头像 cloud:// 批量预解析提速(云函数需重新部署)
- index/timer: 主色底图标改白色变体修复隐形;目标数字按微信字体缩放补偿真机遮挡
- settings: 配色方案横滑渐变色卡;头像上传前压缩至 200px
- theme: 新增 teal 主题;暗黑背景统一对齐
- 圆形头像双保险(image 自身 border-radius)修复月/年榜方图

注: cloudfunctions/leaderboard 改动须在开发者工具重新部署才生效。
2026-07-22 09:36:22 +08:00

51 lines
1.1 KiB
JavaScript

/**
* 系统深色模式监听 — 提供初始值与变更回调
* 旧设备 wx.onThemeChange 失败时退化为只读一次
*/
const STORAGE_KEY = 'dark_mode_pref'
function _readSystemTheme() {
try {
// wx.getSystemInfoSync 已废弃,改用 wx.getWindowInfo(同样返回 theme 字段)
const info = wx.getWindowInfo()
return info.theme === 'dark'
} catch (e) {
return false
}
}
function getInitialDarkMode() {
const pref = wx.getStorageSync(STORAGE_KEY) || 'system'
if (pref === 'system') return _readSystemTheme()
return pref === 'dark'
}
function getPref() {
return wx.getStorageSync(STORAGE_KEY) || 'system'
}
function setPref(value) {
if (!['system', 'light', 'dark'].includes(value)) return
wx.setStorageSync(STORAGE_KEY, value)
}
function watchDarkMode(onChange) {
if (typeof wx.onThemeChange !== 'function') return
try {
wx.onThemeChange(({ theme }) => {
const pref = getPref()
if (pref === 'system') onChange(theme === 'dark')
})
} catch (e) {
// 旧设备不支持,忽略
}
}
module.exports = {
getInitialDarkMode,
getPref,
setPref,
watchDarkMode
}