uni-app 动态修改主题色
<p class="md-end-block md-p md-focus"><span class="md-tab"> <span class="md-plain">老是碰到初版制作完成没多久,就整一出说什么要更改整个项目的色彩体系。真的是宝宝心里苦啊!</span></span></p><p class="md-end-block md-p"><span class="md-tab"> <span class="md-plain">起初都是通过uni项目自带的uni.scss中定义,在替换页面上对应的css。以便于达到一次性修改整体布局的样式。</span></span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">一.uni.scss 使用方式</span></h2>
<p class="md-end-block md-p"><span class="md-plain">在该文件里定义: $名字 :颜色值;</span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2023.cnblogs.com/blog/2237618/202212/2237618-20221214134507384-1261779450.png" alt=""></span></p>
<p>使用时需要在 style 节点上加上 lang=“scss”</p>
<div class="cnblogs_code">
<pre><style lang="scss" scoped><span style="color: rgba(0, 0, 0, 1)">
.bg {
height: 120px;
width: </span>100%<span style="color: rgba(0, 0, 0, 1)">;
background</span>-color: $uni-color-<span style="color: rgba(0, 0, 0, 1)">primary;
}
</span></style></pre>
</div>
<p>该方法使用,适合单一颜色修改,一次修改全局统一。</p>
<h2 class="md-end-block md-heading"><span class="md-plain">二.暗黑主题</span></h2>
<p class="md-end-block md-p"><span class="md-plain">暗黑模式(Dark Mode),也被称为夜间模式或深色模式,是一种高对比度,或者反色模式的显示模式。是一种有利于在黑暗环境下观看手机的高对比度的模式。uni-app的暗黑模式,是帮助开发者完成自己应用的暗黑模式的一批配置和API。开发者可以参考本文实现自己应用的暗黑模式。</span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><strong>注:HBuilder X 3.6.9+ 支持 目前只支持深色和浅色</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">具体介绍看官网地址:<span class="md-link md-pair-s">https://uniapp.dcloud.net.cn/tutorial/darkmode.html</span></span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">三.自定义主题配置</span></h2>
<p class="md-end-block md-p"><span class="md-plain">可自行定义多种主题配色,通过js动态修改导航栏等色彩。缺点在于,页面加载缓慢时前期会显示出原有的色彩。整体上不影响使用。</span></p>
<p class="md-end-block md-p"><span class="md-plain">注:在APP 微信小程序 H5 都行</span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2023.cnblogs.com/blog/2237618/202212/2237618-20221214134558805-1568388512.png" alt=""></span></p>
<h3 class="md-end-block md-heading"><span class="md-plain">1.在根目录下新建 theme 文件夹</span></h3>
<p class="md-end-block md-p"><span class="md-pair-s"><code>css-theme.scss</code><span class="md-plain"> <span class="md-pair-s "><strong>主题适配主要css</strong></span></span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><code>css-variate.scss</code><span class="md-plain"> <span class="md-pair-s"><strong>统一颜色值配置</strong></span></span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><code>cue-theme.js</code><span class="md-plain"> <span class="md-pair-s"><strong>vue 混入js</strong></span></span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><code>system-theme.js</code><span class="md-plain"> <span class="md-pair-s "><strong>自定义的相关配置</strong></span></span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><img src="https://img2023.cnblogs.com/blog/2237618/202212/2237618-20221214134616162-815922249.png" alt=""></span></p>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">css-theme </span></h4>
<p class="md-end-block md-p"><span class="md-plain">主要为使用sass切换主题,百度一下大部分都是按照以下配置,这里不过多介绍</span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><strong>注:uni中使用时 建议这个scss 在 uni.scss 中 引入该scss</strong></span></p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_64df70fd-7faf-4df8-ae5b-92ebd4f09d37" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_64df70fd-7faf-4df8-ae5b-92ebd4f09d37" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_64df70fd-7faf-4df8-ae5b-92ebd4f09d37" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* @author: Jay
* @description: 通过监听 css 变量切换主题色
* @createTime: 2022-12-13 11:29:00
* @introduce: 需要在 uni.scss 中 引入该scss
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
//统一配置色彩
@import "./css-variate.scss";
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">---------------------方法一 使用css 控制变量---------------------------</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
使用方法
.css-theme {
width: 100%;
@include text-color();
@include base-background();
@include border-color();
@include shadow-color();
}
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 白天主题 颜色集合 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
$day-theme:(
bg-color:$day-bg,
text-color:$day-text,
border-color: $day-border,
shadow-color:$day-shadow
);
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 夜间主题 颜色集合 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
$night-theme:(
bg-color:$night-bg,
text-color:$night-text,
border-color: $night-border,
shadow-color: $night-shadow
);
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 玉红主题 颜色集合 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
$jade-theme:(
bg-color:$jade-bg,
text-color:$jade-text,
border-color: $jade-border,
shadow-color: $jade-shadow
);
//定义主题对象
$themes: (
day-theme: $day-theme,
night-theme: $night-theme,
jade-theme: $jade-theme
);
// 生成主题背景色样式
@mixin base-background()</span>{<span style="color: rgba(255, 0, 0, 1)">
@each $themename , $theme in $themes {
&.#{$themename</span>} {<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> map-get($map: $theme, $key: bg-color)</span>;
}<span style="color: rgba(128, 0, 0, 1)">
}
}
// 生成主题字体色样式
@mixin text-color()</span>{<span style="color: rgba(255, 0, 0, 1)">
@each $themename , $theme in $themes {
&.#{$themename</span>} {<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> map-get($map: $theme, $key: text-color) !important</span>;
}<span style="color: rgba(128, 0, 0, 1)">
}
}
// 生成主题边框色样式
@mixin border-color($opa: 1.0)</span>{<span style="color: rgba(255, 0, 0, 1)">
@each $themename , $theme in $themes {
&.#{$themename</span>} {<span style="color: rgba(255, 0, 0, 1)">
border-color</span>:<span style="color: rgba(0, 0, 255, 1)"> rgba(map-get($map: $theme, $key: border-color), $opa) !important</span>;
}<span style="color: rgba(128, 0, 0, 1)">
}
}
// 生成主题阴影
@mixin shadow-color()</span>{<span style="color: rgba(255, 0, 0, 1)">
@each $themename , $theme in $themes {
&.#{$themename</span>} {<span style="color: rgba(255, 0, 0, 1)">
box-shadow</span>:<span style="color: rgba(0, 0, 255, 1)"> 0 16rpx 32rpx rgba(map-get($map: $theme, $key: shadow-color), 0.4)</span>;
}<span style="color: rgba(128, 0, 0, 1)">
}
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">---------------------方法二 使用css 属性选择器---------------------------</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
使用方法
<view class="padding-sm" :data-theme="cueTheme">
暗黑模式-官方自带:(只支持 白天黑夜)
</view>
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 白天主题 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
</span>{<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $day-bg</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> $day-text</span>;<span style="color: rgba(255, 0, 0, 1)">
border-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $day-border !important</span>;<span style="color: rgba(255, 0, 0, 1)">
shadow-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $day-shadow</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 夜间主题 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
</span>{<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $night-bg</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> $night-text</span>;<span style="color: rgba(255, 0, 0, 1)">
border-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $night-border !important</span>;<span style="color: rgba(255, 0, 0, 1)">
shadow-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $night-shadow</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 玉红主题 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
</span>{<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $jade-bg</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> $jade-text</span>;<span style="color: rgba(255, 0, 0, 1)">
border-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $jade-border !important</span>;<span style="color: rgba(255, 0, 0, 1)">
shadow-color</span>:<span style="color: rgba(0, 0, 255, 1)"> $jade-shadow</span>;
}</pre>
</div>
<span class="cnblogs_code_collapse">css-theme </span></div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">uni.scss中引入</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 主题相关颜色 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
@import './theme/css-theme.scss';</span></pre>
</div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">css-variate</span></h4>
<p class="md-end-block md-p"><span class="md-plain">主要为配置主题所需css 颜色值,方便统一修改。</span></p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_0983347f-5da7-41bd-9c6e-9b1014911494" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_0983347f-5da7-41bd-9c6e-9b1014911494" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_0983347f-5da7-41bd-9c6e-9b1014911494" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
主题 统一配置色彩
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
//页面背景色
$page-bg:var(--page-bg,#FFFFFF);
// 白天主题
$day-bg: #FFFFFF;
$day-text: #333333;
$day-border: #c8c7cc;
$day-shadow: #c8c7cc;
// 夜间主题
$night-bg: #292929;
$night-text: #FFFFFF;
$night-border: #c8c7cc;
$night-shadow: #FFFFFF;
// 玉红主题
$jade-bg: #c04851;
$jade-text: #FFFFFF;
$jade-border: #eea2a4;
$jade-shadow: #f1939c;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
需要在js 中使用的css 导出
APP 无法使用
h5 微信小程序有值
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
:export </span>{<span style="color: rgba(255, 0, 0, 1)">
dayBg</span>:<span style="color: rgba(0, 0, 255, 1)"> $day-bg</span>;<span style="color: rgba(255, 0, 0, 1)">
nightBg</span>:<span style="color: rgba(0, 0, 255, 1)"> $night-bg</span>;<span style="color: rgba(255, 0, 0, 1)">
jadeBg</span>:<span style="color: rgba(0, 0, 255, 1)"> $jade-bg</span>;
}</pre>
</div>
<span class="cnblogs_code_collapse">css-variate</span></div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">cue-theme</span></h4>
<p class="md-end-block md-p"><span class="md-plain">主要使用 混入 (mixin) ,方便与在页面中复用相同的功能。</span></p>
<p class="md-end-block md-p"><span class="md-plain">该方法主要调用vuex的数据 和 system-theme 中的方法</span></p>
<p class="md-end-block md-p"><span class="md-plain">注:需要在main.js 导入该js</span></p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_ed65b8b5-ddfd-4d40-a4c1-f303404b3013" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_ed65b8b5-ddfd-4d40-a4c1-f303404b3013" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_ed65b8b5-ddfd-4d40-a4c1-f303404b3013" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* @author: Jay
* @description: 监听主题变化
* @createTime: 2022-12-12 15:22:19
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
import system from </span>'../theme/system-theme'<span style="color: rgba(0, 0, 0, 1)">
import {
mapMutations,
mapGetters
} from </span>'vuex'<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
install(Vue) {
Vue.mixin({
onShow() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">修改导航栏 底部 tab</span>
system.setSystemTheme(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cueTheme)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取缓存 背景色</span>
let bgColor = uni.getStorageSync('pageColor') || ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (bgColor) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.getSystemBg(bgColor)
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取缓存 主题名字</span>
let themeType = uni.getStorageSync('themeType') || ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (themeType) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cueGetTheme(themeType)
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 监听主题状态变化</span>
uni.onThemeChange((res) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log("监听主题状态变化", res.theme);</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">黑夜</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (res.theme == 'dark'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.cueGetTheme('night-theme'<span style="color: rgba(0, 0, 0, 1)">)
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">白天</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> (res.theme == 'light'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 有多个主题时 判断 缓存是否为白色主题</span>
let type = uni.getStorageSync('themeType'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (type != 'day-theme'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cueGetTheme(type)
} </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.cueGetTheme('day-theme'<span style="color: rgba(0, 0, 0, 1)">)
}
}
});
},
computed: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取vuex 主题参数</span>
<span style="color: rgba(0, 0, 0, 1)"> ...mapGetters({
cueTheme: </span>'theme/theme'<span style="color: rgba(0, 0, 0, 1)">,
pageBg: </span>'theme/pageColor'<span style="color: rgba(0, 0, 0, 1)">,
}),
},
methods: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 修改主题</span>
<span style="color: rgba(0, 0, 0, 1)"> ...mapMutations({
cueGetTheme: </span>'theme/GET_THEME'<span style="color: rgba(0, 0, 0, 1)">,
themeCache: </span>'theme/SET_THEME_CACHE'<span style="color: rgba(0, 0, 0, 1)">,
pageColorCache: </span>'theme/SET_PAGE_COLOR'<span style="color: rgba(0, 0, 0, 1)">
}),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置 全局背景色</span>
<span style="color: rgba(0, 0, 0, 1)"> getSystemBg() {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">从 主题列表 获取 页面颜色</span>
let bgColor = system.systemThemeBg(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.cueTheme)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log(bgColor);</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">缓存 已设置 背景色</span>
<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.pageColorCache(bgColor)
}
}
})
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">cue-theme</span></div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">main.js 导入</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">监听主题变化</span>
import theme from './theme/cue-theme.js'<span style="color: rgba(0, 0, 0, 1)">
Vue.use(theme)</span></pre>
</div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">system-theme</span></h4>
<p class="md-end-block md-p"><span class="md-plain">主要用来放置一些需要重复使用的js。可根据需求自行添加</span></p>
<p class="md-end-block md-p"><span class="md-plain">注: themeList 为系统主题列表参数相关配置,用于全局设置系统导航栏,底部tab颜色值的存放。</span></p>
<p class="md-end-block md-p"><span class="md-plain">注:其中导入 css-variate.scss 在app 没有相关数据返回,h5,微信小程序则有数据返回。其他平台自行测试。</span></p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_7a4dae3b-69f4-489f-84c5-4b8693817f7d" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_7a4dae3b-69f4-489f-84c5-4b8693817f7d" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_7a4dae3b-69f4-489f-84c5-4b8693817f7d" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* @author: Jay
* @description: 主题相关配置
* @createTime: 2022-12-12 17:45:09
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
variables APP 拿不到值
h5 微信小程序有值返回
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
import variables from </span>'./css-variate.scss'<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
系统主题列表
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
themeList() {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> [{
title: </span>"白天"<span style="color: rgba(0, 0, 0, 1)">,
name: </span>"day-theme"<span style="color: rgba(0, 0, 0, 1)">,
navBg: variables.dayBg,
navBgApp: </span>"#FFFFFF"<span style="color: rgba(0, 0, 0, 1)">,
tabBg: </span>""<span style="color: rgba(0, 0, 0, 1)">,
tabSeleText: </span>""<span style="color: rgba(0, 0, 0, 1)">,
tabText: </span>""<span style="color: rgba(0, 0, 0, 1)">,
}, {
title: </span>"黑夜"<span style="color: rgba(0, 0, 0, 1)">,
name: </span>"night-theme"<span style="color: rgba(0, 0, 0, 1)">,
navBg: variables.nightBg,
navBgApp: </span>"#292929"<span style="color: rgba(0, 0, 0, 1)">,
tabBg: </span>""<span style="color: rgba(0, 0, 0, 1)">,
tabSeleText: </span>""<span style="color: rgba(0, 0, 0, 1)">,
tabText: </span>""<span style="color: rgba(0, 0, 0, 1)">,
}, {
title: </span>"玉红"<span style="color: rgba(0, 0, 0, 1)">,
name: </span>"jade-theme"<span style="color: rgba(0, 0, 0, 1)">,
navBg: variables.jadeBg,
navBgApp: </span>"#c04851"<span style="color: rgba(0, 0, 0, 1)">,
tabBg: </span>""<span style="color: rgba(0, 0, 0, 1)">,
tabSeleText: </span>""<span style="color: rgba(0, 0, 0, 1)">,
tabText: </span>""<span style="color: rgba(0, 0, 0, 1)">,
}]
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">根据主题 返回背景色</span>
<span style="color: rgba(0, 0, 0, 1)"> systemThemeBg(name) {
let color </span>= ''
<span style="color: rgba(0, 0, 255, 1)">this</span>.themeList().map((item, index) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (item.name ===<span style="color: rgba(0, 0, 0, 1)"> name) {
color </span>=<span style="color: rgba(0, 0, 0, 1)"> item.navBgApp
}
})
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> color
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">根据主题 修改系统 导航栏 底部 tab</span>
<span style="color: rgba(0, 0, 0, 1)"> setSystemTheme(name) {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.themeList().map((item, index) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (item.name ===<span style="color: rgba(0, 0, 0, 1)"> name) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置页面导航条颜色</span>
<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setNavigationColor(item.name, item.navBgApp)
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置 tabBar 样式</span>
<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setTabBarColor(item.tabBg, item.tabSeleText, item.tabText)
}
})
},
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
设置页面导航条颜色
name 主题名字该颜色值只支持2种 故判断对于白天 为 #000 其他均为 #FFF
bgClor 背景色可以随意修改
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
setNavigationColor(name, bgClor) {
let navigationBar </span>=<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 前景颜色值 仅支持 #ffffff 和 #000000</span>
frontColor: name == 'day-theme' ? "#000000" : "#ffffff"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 背景颜色值</span>
backgroundColor: bgClor || "#FFFFFF"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> fail(err) {</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.error(err)</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> }</span>
<span style="color: rgba(0, 0, 0, 1)"> }
uni.setNavigationBarColor(navigationBar)
},
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
动态 设置 tabBar 样式
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
setTabBarColor(bgColor, seleColor, color) {
let tabBar </span>=<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 背景色</span>
backgroundColor: bgColor || '#ffffff'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文字选中时的颜色</span>
selectedColor: seleColor || '#3cc51f'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文字默认颜色</span>
color: color || '#7A7E83'<span style="color: rgba(0, 0, 0, 1)">,
}
uni.setTabBarStyle(tabBar)
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">system-theme</span></div>
<h3 class="md-end-block md-heading"><span class="md-plain">2.vuex 配置</span></h3>
<p class="md-end-block md-p"><span class="md-plain">使用vuex模块化开发(module)用于区分主题相关设置 与其他需求。</span></p>
<p class="md-end-block md-p"><span class="md-plain"><img src="https://img2023.cnblogs.com/blog/2237618/202212/2237618-20221214134926878-1141666419.png" alt=""></span></p>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain">theme.js 模块</span></h4>
<p class="md-end-block md-p"><span class="md-plain">注:<span class="md-pair-s"><code>namespaced: true</code><span class="md-plain"> 主要为 cue-theme 用于模块化调用。缺少这个,在调用cue-theme中的方法时,拿不到所需参数</span></span></span></p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_57d9c0ff-a639-455c-b119-db7683227b7c" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_57d9c0ff-a639-455c-b119-db7683227b7c" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_57d9c0ff-a639-455c-b119-db7683227b7c" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">主题相关配置</span>
import system from '../../theme/system-theme'<span style="color: rgba(0, 0, 0, 1)">
const theme </span>=<span style="color: rgba(0, 0, 0, 1)"> {
namespaced: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">,
state: {
theme: </span>"day-theme"<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">主题列表</span>
<span style="color: rgba(0, 0, 0, 1)"> theme: system.themeList(),
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">页面背景色</span>
pageColor: ""<span style="color: rgba(0, 0, 0, 1)">,
},
mutations: {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置主题色</span>
<span style="color: rgba(0, 0, 0, 1)"> GET_THEME(state, provider) {
state.theme </span>=<span style="color: rgba(0, 0, 0, 1)"> provider
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">修改导航栏 底部 tab</span>
<span style="color: rgba(0, 0, 0, 1)"> system.setSystemTheme(state.theme)
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置主题缓存</span>
<span style="color: rgba(0, 0, 0, 1)"> SET_THEME_CACHE(state, provider) {
uni.setStorage({
key: </span>'themeType'<span style="color: rgba(0, 0, 0, 1)">,
data: provider
});
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置主题缓存</span>
<span style="color: rgba(0, 0, 0, 1)"> SET_PAGE_COLOR(state, provider) {
state.pageColor </span>=<span style="color: rgba(0, 0, 0, 1)"> provider
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">缓存</span>
<span style="color: rgba(0, 0, 0, 1)"> uni.setStorage({
key: </span>'pageColor'<span style="color: rgba(0, 0, 0, 1)">,
data: provider
});
},
},
getters: {
theme: state </span>=><span style="color: rgba(0, 0, 0, 1)"> state.theme,
pageColor: state </span>=><span style="color: rgba(0, 0, 0, 1)"> state.pageColor
},
actions: {
}
}
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> theme</pre>
</div>
<span class="cnblogs_code_collapse">theme.js</span></div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">index.js 全局导出</span></h4>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_7349b6a6-7918-45e8-9eed-1fc3529781c7" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_7349b6a6-7918-45e8-9eed-1fc3529781c7" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_7349b6a6-7918-45e8-9eed-1fc3529781c7" class="cnblogs_code_hide">
<pre>import Vue from "vue"<span style="color: rgba(0, 0, 0, 1)">
import Vuex from </span>"vuex"
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">登录</span>
import logIn from "./modules/login.js"
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">主题切换</span>
import theme from "./modules/theme.js"<span style="color: rgba(0, 0, 0, 1)">
Vue.use(Vuex)
const store </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Vuex.Store({
modules: {
theme,
logIn
}
})
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> store</pre>
</div>
<span class="cnblogs_code_collapse">index.js</span></div>
<h4 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">main.js中导入</span></h4>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">引入store</span>
import store from 'store/index.js'<span style="color: rgba(0, 0, 0, 1)">
Vue.prototype.$store </span>= store</pre>
</div>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain">3.页面中使用</span></h3>
<p class="md-end-block md-p"><span class="md-pair-s"><code>class="conter" :style="{'--page-bg':pageBg}"</code><span class="md-plain"> 为该页面单独设置背景色 ,需要配合 page 设置页面高度使用</span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><code>:data-theme="cueTheme"</code><span class="md-plain"> 给view设置data-theme属性,根据名字匹配对应颜色</span></span></p>
<p class="md-end-block md-p"><span class="md-pair-s"><code>:class=""</code><span class="md-plain"> 设置对应的名字, css 中使用 <span class="md-pair-s"><code>@include text-color();</code></span></span></span></p>
<p class="md-end-block md-p"><strong><span class="md-plain">案例地址: <span class="md-link md-pair-s">https://gitee.com/jielov/uni-app-tabbar</span></span></strong></p>
<p class="md-end-block md-p"><strong><span class="md-plain"><span class="md-link md-pair-s">插件市场地址:https://ext.dcloud.net.cn/plugin?id=10498</span></span></strong></p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_d6d2002f-4945-4f77-bce6-f74f9394a015" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_d6d2002f-4945-4f77-bce6-f74f9394a015" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_d6d2002f-4945-4f77-bce6-f74f9394a015" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
* @author: Jay
* @description: 动态修改主题色
* @createTime: 2022-12-12 14:55:31
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="conter"</span><span style="color: rgba(255, 0, 0, 1)"> :style</span><span style="color: rgba(0, 0, 255, 1)">="{'--page-bg':pageBg}"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="padding margin-bottom-xl css-theme"</span><span style="color: rgba(255, 0, 0, 1)"> :class</span><span style="color: rgba(0, 0, 255, 1)">=""</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-lg text-center text-bold"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
暗黑模式
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="margin-top-sm"</span><span style="color: rgba(255, 0, 0, 1)"> @click</span><span style="color: rgba(0, 0, 255, 1)">="openDoc"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
uni-app的暗黑模式。</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">text </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-blue"</span><span style="color: rgba(0, 0, 255, 1)">></span>点击查看官方文档<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">text</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="css-theme padding"</span><span style="color: rgba(255, 0, 0, 1)"> :class</span><span style="color: rgba(0, 0, 255, 1)">=""</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-center text-bold text-lg"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
通过判断css 名字修改主题!!!
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="margin-tb-sm text-lg text-center"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
当前主题:{{cueTheme}}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="margin-tb-sm text-lg text-center"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
当前页面背景色:{{pageBg}}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="flex align-center justify-around"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="cu-btn round"</span><span style="color: rgba(255, 0, 0, 1)"> @click</span><span style="color: rgba(0, 0, 255, 1)">="cssEditThemeBut('day-theme')"</span><span style="color: rgba(0, 0, 255, 1)">></span>白天<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="cu-btn round"</span><span style="color: rgba(255, 0, 0, 1)"> @click</span><span style="color: rgba(0, 0, 255, 1)">="cssEditThemeBut('night-theme')"</span><span style="color: rgba(0, 0, 255, 1)">></span>黑夜<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="cu-btn round"</span><span style="color: rgba(255, 0, 0, 1)"> @click</span><span style="color: rgba(0, 0, 255, 1)">="cssEditThemeBut('jade-theme')"</span><span style="color: rgba(0, 0, 255, 1)">></span>玉红<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="padding margin-top-xl"</span><span style="color: rgba(255, 0, 0, 1)"> :data-theme</span><span style="color: rgba(0, 0, 255, 1)">="cueTheme"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="text-center text-bold text-lg"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
通过 data-theme 判断 名字修改主题!!!
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
export </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">default</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> {
data() {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">return</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> {
url: </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">https://uniapp.dcloud.net.cn/tutorial/darkmode.html#open-darkmode</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
};
},
onLoad() {
console.log(</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">"</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">当前主题:</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">"</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">, </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">this</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">.cueTheme);
},
onShow() {},
methods: {
cssEditThemeBut(e) {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">修改主题</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">this</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">.cueGetTheme(e)
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">设置主题缓存</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">this</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">.themeCache(e)
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">设置 全局背景色</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">this</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">.getSystemBg()
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> js自改变量值h5 可用</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> document.getElementsByTagName('body').style.setProperty('--page-bg', 'red');</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> },
openDoc() {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> #ifdef APP</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> plus.runtime.openWeb(</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">this</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">.url);
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> #endif</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> #ifdef H5</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> let a </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> document.createElement(</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">a</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">);
a.href </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=</span> <span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">this</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">.url;
a.target </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=</span> <span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">__blank</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">;
a.click();
a </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=</span> <span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">null</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">;
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">//</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> #endif</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> }
}
}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">/*</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)"> 全局背景色 </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*/</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(128, 0, 0, 1)">
page </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">{</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(255, 0, 0, 1)">
height</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">:</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)"> 100%</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">;</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">}</span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style </span><span style="color: rgba(255, 0, 0, 1)">lang</span><span style="color: rgba(0, 0, 255, 1)">="scss"</span><span style="color: rgba(255, 0, 0, 1)"> scoped</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(128, 0, 0, 1)">
// 全局背景色
.conter </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">{</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(255, 0, 0, 1)">
height</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">:</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)"> 100%</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">;</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(255, 0, 0, 1)">
background-color</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">:</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)"> $page-bg</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">;</span>
<span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">}</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(128, 0, 0, 1)">
.css-theme </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">{</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(255, 0, 0, 1)">
// border</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">:</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)"> 2px solid</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">;</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(255, 0, 0, 1)">
@include text-color();
@include base-background();
@include border-color();
@include shadow-color();
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">}</span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">页面代码</span></div>
<h2>四.黑夜 白天主题展示</h2>
<p><img src="https://img2023.cnblogs.com/blog/2237618/202212/2237618-20221214135154123-2042313512.png" alt="" loading="lazy"><img src="https://img2023.cnblogs.com/blog/2237618/202212/2237618-20221214135209631-313876479.png" alt="" loading="lazy"></p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:虚乄,转载请注明原文链接:https://www.cnblogs.com/lovejielive/p/16981875.html</p><br><br>
来源:https://www.cnblogs.com/lovejielive/p/16981875.html
頁:
[1]