uni-app x 项目开发时主题切换,如何统一切换字体颜色和button背景色等样式,并与系统暗夜模式同时渲染?求良策,详细聊一聊
uni-app x 项目开发时主题切换,如何统一切换字体颜色和button背景色等样式,并与系统暗夜模式同时渲染?求良策,详细聊一聊
兄弟大佬们,小弟最近在用uniapp x 项目开发,遇到一个问题,就是主题切换时,怎么给字体颜色和button背景色等样式做统一切换,能和系统的暗夜模式同时渲染,谁有好的良策,详细聊一聊,最后能便于长期维护的方案,类似与起点APP那种,感谢!
信息类型 | 信息 |
---|---|
开发工具 | uniapp x |
我这边做过类似,有兴趣的话可以加q:1156854311一起讨论
好的
买组件,很多组件支持主题
或
https://doc.dcloud.net.cn/uni-app-x/api/theme-change.html#onappthemechange
官方给出的,已经能够实现
就是用了官方的,才想着要渲染字体等样式
定义两个对象light/dark,里面放各种颜色值,然后动态绑定style样式呗
const dark={
bgColor:"#333"
}
const light={
bgColor:"#fff"
}
if(暗黑模式){
theme=dark
}
<view :style={background:theme.bgColor}></view>
可不可以做成俩个css文件,根据theme值进行适配
在uni-app项目中实现主题切换,并统一切换字体颜色和button背景色等样式,同时与系统暗夜模式同步渲染,可以通过以下方法实现。以下是一个具体的实现思路和代码案例。
1. 使用CSS变量和JavaScript监听系统主题变化
首先,在全局样式文件(如App.vue
的<style>
部分)中定义CSS变量:
:root {
--font-color: #000;
--button-bg-color: #fff;
}
@media (prefers-color-scheme: dark) {
:root {
--font-color: #fff;
--button-bg-color: #000;
}
}
2. 在组件中使用CSS变量
接下来,在你的组件(如Home.vue
)中使用这些CSS变量:
<template>
<view class="container">
<text class="title">Hello, uni-app!</text>
<button class="theme-button">Click Me</button>
</view>
</template>
<style scoped>
.container {
padding: 20px;
}
.title {
color: var(--font-color);
}
.theme-button {
background-color: var(--button-bg-color);
color: var(--font-color);
padding: 10px 20px;
border: none;
border-radius: 5px;
}
</style>
3. 监听系统主题变化并更新CSS变量
在App.vue
的JavaScript部分,添加监听系统主题变化的逻辑:
export default {
onLaunch() {
const updateTheme = () => {
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (isDarkMode) {
document.documentElement.style.setProperty('--font-color', '#fff');
document.documentElement.style.setProperty('--button-bg-color', '#000');
} else {
document.documentElement.style.setProperty('--font-color', '#000');
document.documentElement.style.setProperty('--button-bg-color', '#fff');
}
};
// Initial theme update
updateTheme();
// Listen for theme changes
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', updateTheme);
},
};
4. 手动切换主题
为了手动切换主题,你可以在应用中添加一个主题切换按钮,并更新CSS变量:
methods: {
toggleTheme() {
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
if (isDarkMode) {
document.documentElement.style.setProperty('--font-color', '#000');
document.documentElement.style.setProperty('--button-bg-color', '#fff');
} else {
document.documentElement.style.setProperty('--font-color', '#fff');
document.documentElement.style.setProperty('--button-bg-color', '#000');
}
},
},
在模板中添加一个按钮来调用这个方法:
<button @click="toggleTheme">Toggle Theme</button>
通过上述方法,你可以实现uni-app项目中主题切换,统一切换字体颜色和button背景色等样式,并与系统暗夜模式同步渲染。