Browse Source

实现黑白测试功能:添加深色模式和高对比度模式切换

pull/1/head
徐飞洋 3 months ago
parent
commit
57fb045016
  1. 86
      app.js
  2. 139
      pages/test-tools/test-mode-switch.js
  3. 50
      pages/test-tools/test-mode-switch.wxml
  4. 149
      pages/test-tools/test-mode-switch.wxss

86
app.js

@ -2,6 +2,10 @@ App({
onLaunch: function () { onLaunch: function () {
// 初始化应用 // 初始化应用
console.log('App Launch') console.log('App Launch')
// 加载并应用黑白测试设置
this.loadAndApplyTestModeSettings()
// 初始化本地存储的标签和用户数据 // 初始化本地存储的标签和用户数据
if (!wx.getStorageSync('users')) { if (!wx.getStorageSync('users')) {
wx.setStorageSync('users', {}) wx.setStorageSync('users', {})
@ -100,9 +104,89 @@ App({
return await API.uploadPhoneNumberData(phoneData) return await API.uploadPhoneNumberData(phoneData)
}, },
/**
* 加载并应用黑白测试设置
*/
loadAndApplyTestModeSettings() {
// 从本地存储获取设置
const isDarkMode = wx.getStorageSync('isDarkMode') || false
const isHighContrast = wx.getStorageSync('isHighContrast') || false
// 应用设置
this.applyDarkMode(isDarkMode)
this.applyHighContrastMode(isHighContrast)
console.log('应用启动时加载黑白测试设置: 深色模式=' + isDarkMode + ', 高对比度=' + isHighContrast)
},
/**
* 应用深色模式设置
*/
applyDarkMode(isDarkMode) {
// 更新窗口和导航栏样式
wx.setNavigationBarColor({
frontColor: isDarkMode ? '#ffffff' : '#000000',
backgroundColor: isDarkMode ? '#000000' : '#ffffff',
animation: {
duration: 400,
timingFunc: 'easeInOut'
}
})
wx.setBackgroundColor({
backgroundColor: isDarkMode ? '#000000' : '#ffffff',
backgroundColorTop: isDarkMode ? '#000000' : '#ffffff',
backgroundColorBottom: isDarkMode ? '#000000' : '#ffffff'
})
},
/**
* 应用高对比度模式设置
*/
applyHighContrastMode(isHighContrast) {
// 移除旧的高对比度样式
const oldStyle = wx.createSelectorQuery().select('#highContrastStyle')
oldStyle.context((res) => {
if (res.context) {
wx.removeStyleSheet('#highContrastStyle')
}
})
if (isHighContrast) {
// 创建高对比度样式
const styleContent = `
/* 高对比度样式 */
* {
filter: grayscale(100%) contrast(120%) !important;
}
/* 确保文字可读性 */
text, span, div, p {
color: #000 !important;
background-color: #fff !important;
}
/* 按钮和交互元素 */
button, .btn {
border: 2px solid #000 !important;
color: #000 !important;
background-color: #fff !important;
}
`
// 动态添加样式
const styleSheet = document.createElement('style')
styleSheet.id = 'highContrastStyle'
styleSheet.textContent = styleContent
document.head.appendChild(styleSheet)
}
},
globalData: { globalData: {
userInfo: null, userInfo: null,
currentTab: 'index', // 当前选中的tab currentTab: 'index', // 当前选中的tab
showTabBar: true // 控制底部tab-bar显示状态 showTabBar: true, // 控制底部tab-bar显示状态
isDarkMode: false, // 是否处于深色模式
isHighContrast: false // 是否处于高对比度模式
} }
}) })

139
pages/test-tools/test-mode-switch.js

@ -0,0 +1,139 @@
// pages/test-tools/test-mode-switch.js
Page({
/**
* 页面的初始数据
*/
data: {
isDarkMode: false,
isHighContrast: false
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
// 从本地存储获取当前模式设置
const darkMode = wx.getStorageSync('isDarkMode') || false
const highContrast = wx.getStorageSync('isHighContrast') || false
this.setData({
isDarkMode: darkMode,
isHighContrast: highContrast
})
this.applyModeSettings()
},
/**
* 切换深色/浅色模式
*/
toggleDarkMode(e) {
const isDarkMode = e.detail.value
this.setData({ isDarkMode })
wx.setStorageSync('isDarkMode', isDarkMode)
this.applyModeSettings()
},
/**
* 切换高对比度模式
*/
toggleHighContrast(e) {
const isHighContrast = e.detail.value
this.setData({ isHighContrast })
wx.setStorageSync('isHighContrast', isHighContrast)
this.applyModeSettings()
},
/**
* 应用模式设置
*/
applyModeSettings() {
const { isDarkMode, isHighContrast } = this.data
// 创建或删除高对比度样式
this.createOrRemoveHighContrastStyle(isHighContrast)
// 更新窗口背景和导航栏样式
this.updateWindowStyle(isDarkMode)
console.log(`黑白测试模式设置: 深色模式=${isDarkMode}, 高对比度=${isHighContrast}`)
wx.showToast({
title: '模式已更新',
icon: 'success'
})
},
/**
* 创建或删除高对比度样式
*/
createOrRemoveHighContrastStyle(enable) {
// 移除旧的高对比度样式
const oldStyle = wx.createSelectorQuery().select('#highContrastStyle')
oldStyle.context((res) => {
if (res.context) {
wx.removeStyleSheet('#highContrastStyle')
}
})
if (enable) {
// 创建高对比度样式
const styleContent = `
/* 高对比度样式 */
* {
filter: grayscale(100%) contrast(120%) !important;
}
/* 确保文字可读性 */
text, span, div, p {
color: #000 !important;
background-color: #fff !important;
}
/* 按钮和交互元素 */
button, .btn {
border: 2px solid #000 !important;
color: #000 !important;
background-color: #fff !important;
}
`
// 动态添加样式
const styleSheet = document.createElement('style')
styleSheet.id = 'highContrastStyle'
styleSheet.textContent = styleContent
document.head.appendChild(styleSheet)
}
},
/**
* 更新窗口样式
*/
updateWindowStyle(isDarkMode) {
wx.setNavigationBarColor({
frontColor: isDarkMode ? '#ffffff' : '#000000',
backgroundColor: isDarkMode ? '#000000' : '#ffffff',
animation: {
duration: 400,
timingFunc: 'easeInOut'
}
})
wx.setBackgroundColor({
backgroundColor: isDarkMode ? '#000000' : '#ffffff',
backgroundColorTop: isDarkMode ? '#000000' : '#ffffff',
backgroundColorBottom: isDarkMode ? '#000000' : '#ffffff'
})
},
/**
* 重置所有设置
*/
resetAllSettings() {
this.setData({
isDarkMode: false,
isHighContrast: false
})
wx.setStorageSync('isDarkMode', false)
wx.setStorageSync('isHighContrast', false)
this.applyModeSettings()
}
})

50
pages/test-tools/test-mode-switch.wxml

@ -0,0 +1,50 @@
<!--pages/test-tools/test-mode-switch.wxml-->
<view class="container">
<view class="header">
<text class="title">黑白测试设置</text>
<text class="subtitle">调整应用的显示模式以进行黑白测试</text>
</view>
<view class="setting-item">
<view class="setting-label">
<text class="label-text">深色模式</text>
<text class="label-desc">切换应用的明/暗主题</text>
</view>
<switch
class="setting-switch"
checked="{{isDarkMode}}"
bindchange="toggleDarkMode"
color="#1AAD19"
/>
</view>
<view class="setting-item">
<view class="setting-label">
<text class="label-text">高对比度模式</text>
<text class="label-desc">启用黑白高对比度显示</text>
</view>
<switch
class="setting-switch"
checked="{{isHighContrast}}"
bindchange="toggleHighContrast"
color="#1AAD19"
/>
</view>
<view class="button-group">
<button
class="reset-button"
bindtap="resetAllSettings"
type="default"
>
重置为默认设置
</button>
</view>
<view class="tips">
<text class="tip-text">提示:</text>
<text class="tip-content">1. 深色模式会改变应用的整体色调</text>
<text class="tip-content">2. 高对比度模式会将所有元素转为黑白并提高对比度</text>
<text class="tip-content">3. 这些设置会保存在本地,下次打开应用时自动应用</text>
</view>
</view>

149
pages/test-tools/test-mode-switch.wxss

@ -0,0 +1,149 @@
/** pages/test-tools/test-mode-switch.wxss **/
.container {
padding: 40rpx 30rpx;
background-color: #fff;
min-height: 100vh;
}
.header {
text-align: center;
margin-bottom: 60rpx;
}
.title {
font-size: 36rpx;
font-weight: bold;
color: #333;
display: block;
margin-bottom: 20rpx;
}
.subtitle {
font-size: 26rpx;
color: #666;
display: block;
line-height: 1.5;
}
.setting-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx 0;
border-bottom: 1rpx solid #f0f0f0;
}
.setting-label {
flex: 1;
margin-right: 30rpx;
}
.label-text {
font-size: 30rpx;
color: #333;
display: block;
margin-bottom: 8rpx;
}
.label-desc {
font-size: 24rpx;
color: #999;
display: block;
line-height: 1.4;
}
.setting-switch {
transform: scale(1.2);
}
.button-group {
margin-top: 60rpx;
padding: 0 20rpx;
}
.reset-button {
width: 100%;
height: 90rpx;
line-height: 90rpx;
font-size: 30rpx;
border-radius: 15rpx;
border: 2rpx solid #1AAD19;
color: #1AAD19;
background-color: #fff;
}
.reset-button:active {
background-color: #f0f0f0;
}
.tips {
margin-top: 60rpx;
padding: 30rpx;
background-color: #f8f8f8;
border-radius: 15rpx;
border-left: 4rpx solid #1AAD19;
}
.tip-text {
font-size: 28rpx;
font-weight: bold;
color: #333;
display: block;
margin-bottom: 15rpx;
}
.tip-content {
font-size: 24rpx;
color: #666;
display: block;
margin-bottom: 10rpx;
line-height: 1.5;
}
/* 深色模式适配 */
.container.dark-mode {
background-color: #1a1a1a;
}
.container.dark-mode .title {
color: #fff;
}
.container.dark-mode .subtitle {
color: #ccc;
}
.container.dark-mode .setting-item {
border-bottom-color: #333;
}
.container.dark-mode .label-text {
color: #fff;
}
.container.dark-mode .label-desc {
color: #999;
}
.container.dark-mode .reset-button {
border-color: #4CAF50;
color: #4CAF50;
background-color: #1a1a1a;
}
.container.dark-mode .reset-button:active {
background-color: #333;
}
.container.dark-mode .tips {
background-color: #2a2a2a;
border-left-color: #4CAF50;
}
.container.dark-mode .tip-text {
color: #fff;
}
.container.dark-mode .tip-content {
color: #ccc;
}
Loading…
Cancel
Save