一、夜间模式设计原则
1. 健康优先
- 避免纯黑背景(易引发视觉疲劳),采用深灰(如 ` 121212`)或深蓝灰(` 1E1E2E`)作为主色调。
- 文字颜色使用浅灰(` E0E0E0`)或米白(` F5F5F5`),确保对比度≥4.5:1(WCAG标准)。
- 图标/按钮采用低饱和度色彩(如浅蓝、浅绿),减少强光刺激。
2. 场景适配
- 时间触发:根据用户设备时间(22:00-7:00)自动切换,或提供手动开关。
- 内容优先:生鲜商品图片需保持色彩真实,可通过CSS滤镜微调亮度(`filter: brightness(90%)`)。
3. 无缝切换
- 动态切换时添加100-200ms的渐变动画,避免突兀感。
- 保留用户偏好设置(如“跟随系统”或“永久开启”)。
二、万象源码部署关键点
1. 主题变量管理
- 使用CSS变量(Custom Properties)定义颜色:
```css
:root {
--bg-primary: FFFFFF;
--text-primary: 333333;
}
.dark-mode {
--bg-primary: 121212;
--text-primary: E0E0E0;
}
```
- 通过JavaScript动态切换类名:
```javascript
document.body.classList.toggle(dark-mode, isDarkMode);
```
2. 图片与图标适配
- 对生鲜商品图使用`
`标签或CSS `object-fit`保持比例。
- 图标库(如Iconfont)需提供暗色版本,或通过SVG `fill`属性动态变色。
3. 性能优化
- 避免重复渲染:使用`React.memo`或`Vue.keep-alive`缓存组件。
- 减少重排:通过`transform`和`opacity`实现动画,而非修改布局属性。
三、生鲜场景特殊设计
1. 商品展示优化
- 夜间高亮标签:促销标签使用暗色背景+浅色文字(如` FF4D4F`背景+` FFFFFF`文字)。
- 图片亮度控制:通过CSS滤镜微调商品图亮度,避免过暗影响细节:
```css
.dark-mode .product-image {
filter: brightness(95%) contrast(105%);
}
```
2. 交互反馈增强
- 按钮点击效果:使用深色悬浮态(如` 2D2D2D`)和浅色波纹动画。
- 加载状态:骨架屏背景色与夜间模式主色一致,避免闪烁。
3. 文字可读性
- 商品描述文字行高增加至1.6,段落间距加大,减少夜间阅读压力。
- 价格数字使用更大字号(如`18px`)和加粗字体。
四、技术实现示例(微信小程序)
1. 全局样式管理
- 在`app.wxss`中定义主题变量:
```css
page {
--bg-color: FFFFFF;
--text-color: 333333;
}
.dark-mode page {
--bg-color: 121212;
--text-color: E0E0E0;
}
```
2. 动态切换逻辑
- 在`app.js`中监听系统主题或手动切换:
```javascript
App({
onLaunch() {
const systemInfo = wx.getSystemInfoSync();
this.globalData.isDarkMode = systemInfo.theme === dark;
}
});
```
3. 组件适配
- 商品卡片组件动态绑定样式:
```html
```
五、测试与迭代
1. 设备兼容性
- 测试不同品牌手机(如华为、小米、iPhone)的深色模式适配效果。
- 验证低亮度环境下的可读性和色彩准确性。
2. 用户反馈收集
- 通过弹窗或问卷收集夜间模式使用体验,重点优化:
- 切换流畅度
- 文字/图片对比度
- 特定场景(如搜索、购物车)的可用性
3. A/B测试
- 对比默认模式与夜间模式的用户停留时长、转化率,验证设计有效性。
六、贴心细节补充
- 新手引导:首次开启夜间模式时显示提示弹窗,说明功能优势。
- 定时关闭:允许用户设置自动关闭时间(如“次日8:00关闭”)。
- 环境光感应:通过`DeviceMotion` API检测环境光,动态调整亮度(需用户授权)。
通过以上设计,生鲜小程序夜间模式既能保护用户视力,又能保持商品展示的吸引力,同时通过万象源码的灵活部署实现高效开发。