添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

进入实现方法和讲解

 <view class="dark-bg" :style="{'--text-color': color}"> // 注意这里的 text-color
    <view class="h2">测试组件</view>
      <select-theme></select-theme>
    </view>
    <view class="h2">背景测试</view>
    <view class="bg-test"></view>
    <view class="h2">字体测试</view>
    <view class="font-test">
      <view>普通字体</view>
      <view class="font-btn">按钮字体</view>
    </view>
  </view>

–text-color :

可以理解为一个style的属性变量,只要操作后边的color变量就可以实现颜色动态改变

声明变量:

theme.scss

/* 普通字体颜色 */
$text-color: var(--text-color);
/* 按钮字体颜色 */
$text-color-reverse: var(--text-color-reverse);
/* tab字体颜色 */
$text-color-tab: var(--text-color-tab);
/* 普通背景颜色 */
$bg-color: var(--bg-color);
/* 普通阴影颜色 */
$bg-shadow: var(--bg-shadow);
/* 主题颜色 */
$theme-color: var(--theme-color);

vuex 中定义主题颜色和方案

export default {
  namespaced: true,
  state: {
    // 深色系主题
    dark: {
      '--text-color': '#000000',
      '--text-color-reverse': '#ccc9bd',
      '--text-color-tab': '#ddd8be',
      '--bg-color': '#0000004d',
      '--bg-shadow': '#e9ead82e'
    // 浅色系主题
    light: {
      '--text-color': '#ffffff',
      '--text-color-reverse': '#333642',
      '--text-color-tab': '#222741',
      '--bg-color': '#ffffff4d',
      '--bg-shadow': '#1615272e'
    // 主题方案
    scheme: ['dark', 'light'],
    // 当前主题
    theme: 'light'
  getters: {
    theme(state) {
      return state[state.theme]
  mutations: {
    updateTheme(state, { theme, message = '主题切换完成' }) {
      if (state.scheme.includes(theme)) {
        state.theme = theme
        message &&
          uni.showToast({
            title: message,
            icon: 'none'
      } else {
        console.warn(new Error('不存在的主题类型'))

由上可见:

getters中会根据state中当前的主题方案theme来读取state中的不同方案;
给到页面中的style就可以了,这样这个有style属性的子级元素就可以使用此变量

<template>
  <view class="dark-bg" :style="theme">
    <view class="h2">测试组件</view>
      <select-theme></select-theme>
    </view>
    <view class="h2">背景测试</view>
    <view class="bg-test"></view>
    <view class="h2">字体测试</view>
    <view class="font-test">
      <view>普通字体</view>
      <view class="font-btn">按钮字体</view>
    </view>
  </view>
</template>
<script>
import SelectTheme from '@/components/select-theme'
import { mapGetters } from 'vuex'
export default {
  components: {
    SelectTheme
  computed: {
    ...mapGetters('theme', ['theme'])
</script>
<style scoped lang="scss">
.dark-bg {
  width: 100vw;
  height: 100vh;
  font-size: 16px;
  background: #33333390;
  color: $text-color;
.h2 {
  font-size: 20px;
  font-weight: bold;
.px-class {
  width: 100px;
  height: 100px;
  background: $success-color;
.bg-test {
  width: 300px;
  height: 160px;
  border-radius: 10px;
  background: $bg-color;
.font-test {
  color: $text-color;
  .font-btn {
    color: $text-color-reverse;
</style>

select-theme组件:

<template>
    <view class="select">
        :class="[{ 'active-ele': theme === item }]"
        v-for="item in scheme"
        :key="item"
        @click="selectChange(item)"
        >{{ item }}</view
    </view>
  </view>
</template>
<script>
import { mapMutations, mapGetters, mapState } from 'vuex'
export default {
  computed: {
    ...mapGetters('theme', ['theme']),
    ...mapState('theme', ['theme', 'scheme'])
  methods: {
    ...mapMutations('theme', ['updateTheme']),
    selectChange(theme) {
      this.updateTheme({ theme })
</script>
<style scoped lang="scss">
.select {
  > view {
    padding: 5px 15px;
    border-radius: 10px;
    display: inline-block;
    cursor: pointer;
.active-ele {
  background: $success-color;
  color: $text-color-tab;
</style>
                    先看效果以上是两种主题方案进入实现方法和讲解原理: &lt;view class="dark-bg" :style="{'--text-color': color}"&gt; // 注意这里的 text-color    &lt;view class="h2"&gt;测试组件&lt;/view&gt;    &lt;view&gt;      &lt;select-theme&gt;&lt;/select-theme&gt;    &lt;/view&gt;    &lt;view
<view :style="{ paddingTop: num + 'px' }"></view>
<view :style="{backgroundImage: 'url(' + imageURL + ')','background-repeat':'no-repeat', 
				
已将前期写的uniapp主题转换弄成了一个项目,上传至uniapp组件库。可以根据以下api进行主题切换,此组件只适用于app端(因为浏览器环境就可以正常写了,不用这么麻烦)。 组件地址:添加链接描述 Theme 主题切换 主要使用scss与vuex支持uniapp主题切换 使用方法: npm install template调用示例: :class="[vtheme,'content']" scss调用示例: .content { @include base-backgro
1.添加webpack插件,新建文件webpack/themePlugin.js const ThemeColorReplacer = require('webpack-theme-color-replacer') const forElementUI = require('webpack-theme-color-replacer/forElementUI') const config = require('../src/conf Webpack加载器,将$b变量声明注入到处理后的文件中,并以当前BEM块的名称作为值。 当我们开发Web应用程序时,我们在文件系统上使用BEM。 有时,块变得太大而无法轻松处理,并且当您突然需要重命名块时,必须在每个文件中重写该名称。 为了使操作更容易一些,我们决定通过$b变量来统一SCSS文件中的块名称。 同时,它允许我们使用模板生成SCSS文件,而不必关心那里的选择器的正确名称。 在您的项目中安装加载程序: npm install --save-dev @funboxteam/scss-vars-loader 将其添加到项目的Webpack配置中,以便在sass-loader之前调用它: module . exports = { // ... module : { rules
UniApp使用Element-UI的el-date-picker组件需要先引入Element-UI库。具体步骤如下: 1. 在项目根目录下的`uni.scss`文件中引入Element-UI的样式: ```scss @import "~element-ui/packages/theme-chalk/src/index"; 2. 在`main.js`文件中引入Element-UI的组件: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) 3. 在你需要使用el-date-picker组件的页面中,使用以下代码来创建一个日期选择器: ```vue <template> <el-date-picker v-model="date" type="date" placeholder="请选择日期"/> </view> </template> <script> export default { data() { return { date: '' </script> 在上面的代码中,我们使用了v-model来双向绑定日期选择器的值,type属性设置为`date`代表只选择日期,placeholder属性设置占位文本。 4. 运行你的UniApp项目,你就可以在安卓设备上看到el-date-picker组件了。 问题产生的原因是因为UniApp是基于Vue开发的跨平台框架,而Element-UI是基于Vue开发的组件库,UniApp并不原生支持Element-UI的组件。因此,需要手动引入Element-UI的样式和组件,并进行相应的配置才能在UniApp使用el-date-picker组件。 相关问题: 1. 如何在UniApp使用其他Element-UI的组件? 2. UniApp支持哪些UI库?