Vue的暗黑模式

判断当前环境是否为暗黑模式

const isLight = window.matchMedia('(prefers-color-scheme: light)').matches;
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;

那么我们就可以这样,

<script setup>
import TheWelcome from '../components/TheWelcome.vue'
import {reactive, ref, watch} from "vue";

const value = ref('')

import {onMounted} from "vue";

//是否为黑暗模式
const isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
//模式光亮模式    
let theme = ref('light')

//一开始就做判断,theme是动态的
onMounted(()=>{
  theme.value = isDarkMode?'dark':'light'
})

</script>

<template>
  <main>
    <van-config-provider :theme="theme"/>
  </main>
</template>


然后再加上,每当用户改变黑暗或者光明模式,都加上监听事件

let mqList = window.matchMedia('(prefers-color-scheme: dark)');

mqList.addEventListener('change', (event) => {
  // is dark mode
  if (event.matches) {
    console.log('变暗')
    theme.value = 'dark'
  } else {
    // not dark mode
    console.log('变光')
    theme.value = 'light'
  }
});

vant的暗黑模式

官方文档

他的设置方法是加入一个组件,而这个组件会自动地渲染所有的vant组件变成暗黑模式

简单使用

在任意地方加上

    <van-config-provider theme="dark"/>

这句话,就会让所有的vant组件变成暗黑模式了

设置暗黑模式css

官方说是这么说,但是我真的没有成功过。。。。

vant官方设置了一套暗黑模式的css,如果我们不想的话,可以自己设置

<van-config-provider
  :theme-vars="themeVars"
  :theme-vars-dark="themeVarsDark"
  :theme-vars-light="themeVarsLight"
>

  • theme-vars是默认的css变量
  • theme-vars-dark: 仅在深色模式下生效的 CSS 变量,优先级高于 theme-vars 中定义的变量。
  • theme-vars-light: 仅在浅色模式下生效的 CSS 变量,优先级高于 theme-vars 中定义的变量。
import { ref } from 'vue';

export default {
  setup() {
    const themeVars = { buttonPrimaryBackground: 'red' };
    const themeVarsDark = { buttonPrimaryBackground: 'blue' };
    const themeVarsLight = { buttonPrimaryBackground: 'green' };

    return {
      themeVars,
      themeVarsDark,
      themeVarsLight,
    };
  },
};

vueUse配合暗黑模式

这个就更简单了

<script setup>
import { useDark} from '@vueuse/core'

//直接调用库,判断是否为暗黑,而且是响应式的
let isDark = useDark()
// computed,根据isDark变化而变化
const theme = computed(()=>isDark.value?'dark':'light')
    
    
</script>
<template>
    <div>
<!--        直接拿配置过来就行-->
        <van-config-provider :theme="theme"/>
        当前是否为暗黑模式:{{theme}}
    </div>        
</template>



如果想要在isDark发生变化时,进行某些操作,可以直接在里面写个函数

  const isDark = useDark(
      // options 配置项,其中有个函数可以写的
    {
        onChanged(dark) {
            console.log('改变了颜色,dark值当前为:' + dark)
        }
    }
)

如果低版本浏览器显示错误,请看我博客另一个文章 :Vue在低版本浏览器兼容问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值