Vue+scss白天和夜间模式切换功能的实现方法


Posted in Vue.js onJanuary 05, 2021

本文主要介绍了Vue+scss白天和夜间模式切换功能的实现方法,分享给大家,具体如下:

效果图

Vue+scss白天和夜间模式切换功能的实现方法 

图片被压缩了不够清晰。

安装Scss

注:若安装失败可以考虑使用cnpm,或者切换npm源等方式安装。

npm install node-sass --save-dev  //安装node-sass
npm install sass-loader --save-dev //安装sass-loader
npm install style-loader --save-dev //安装style-loader

新建页面DarkModelPage.vue

文件所在位置:src/DarkModelPage.vue

命名路由路径:/dark-model-page

<template>
  <div id="DarkModelPage">
    
  </div>
</template>

<script>
export default {
  
}
</script>

<style scoped lang="scss">

</style>

在src/assets新建目录scss

在src/assets/scss新建目录common

然后需要新建三个scss文件分别是

  • _themes.scss
  • _handle.scss
  • common.scss

_themes.scss

$themes: (
 light: (
  background_color: #cccccc,//背景色
  text-color: rgba(0, 0, 0, 0.65), // 主文本色
 ),
 dark: (
  background_color: #181c27,//背景
  text-color: rgba(255, 255, 255, 0.65), // 主文本色
 )
);

_handle.scss

@import "./_themes.scss";

//遍历主题map
@mixin themeify {
 @each $theme-name, $theme-map in $themes {
  //!global 把局部变量强升为全局变量
  $theme-map: $theme-map !global;
  //判断html的data-theme的属性值 #{}是sass的插值表达式
  //& sass嵌套里的父容器标识  @content是混合器插槽,像vue的slot
  [data-theme="#{$theme-name}"] & {
   @content;
  }
 }
}

//声明一个根据Key获取颜色的function
@function themed($key) {
 @return map-get($theme-map, $key);
}

//获取背景颜色
@mixin background_color($color) {
 @include themeify {
  background: themed($color)!important;
 }
}
//获取字体颜色
@mixin font_color($color) {
 @include themeify {
  color: themed($color)!important;
 }
}

common.scss

@import "@/assets/scss/common/_handle.scss";
/**
自定义的公共样式...
**/

DarkModelPage.vue中使用

<template>
  <div id="DarkModelPage">
    <div>
      <h1 class="title">天小天个人网</h1>
      <a class="btn" @click="modelBrn">模式切换</a>
    </div>
  </div>
</template>

<script>
export default {
  name: "DarkModelPage",
  data(){
    return {
     dark:false,
    }
  },
  methods:{
    modelBrn(){
      this.dark = !this.dark;
      if(this.dark){
        window.document.documentElement.setAttribute( "data-theme", 'dark' );
      }else{
         window.document.documentElement.setAttribute( "data-theme", 'light' );
      }
    },
  },
  mounted() {
    window.document.documentElement.setAttribute( "data-theme", 'light' );
  },
}
</script>

<style scoped lang="scss">
@import '@/assets/scss/common/common';

#DarkModelPage{
  //在此使用了背景颜色变量
  @include background_color("background_color");
  //再次使用了文字颜色变量
  @include font_color("text-color");

  width: 100vw;
  height: 100vh;
  display: flex;
  justify-content:center;
  align-items: center;
  transition: background 1s , color 0.6s;
  .title{
    margin-bottom: 20px;
  }
  .btn{
    cursor: pointer;
    display: flex;
    justify-content: center;
    align-items: center;
    width: 100px;
    height: 40px;
    margin: 0 auto;
  }
}
</style>

注:如需更多颜色及样式切换,只需要在_themes.scss设置好变量,通过 _handle.scss设置切换函数,即可以在页面中通过该函数对指定样式进行设置。

本文演示视频: 点击浏览

到此这篇关于Vue+scss白天和夜间模式切换功能的实现方法的文章就介绍到这了,更多相关Vue 白天和夜间模式切换 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
详解Vue中的自定义指令
Dec 07 Vue.js
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
Vue 组件注册全解析
Dec 17 Vue.js
Vue实现多页签组件
Jan 14 Vue.js
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 Vue.js
vue 数据双向绑定的实现方法
Mar 04 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
Vue 打包后相对路径的引用问题
Jun 05 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 #Vue.js
vue3弹出层V3Popup实例详解
Jan 04 #Vue.js
vue3自定义dialog、modal组件的方法
Jan 04 #Vue.js
vue中父子组件的参数传递和应用示例
Jan 04 #Vue.js
如何在VUE中使用vue-awesome-swiper
Jan 04 #Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 #Vue.js
手写Vue源码之数据劫持示例详解
Jan 04 #Vue.js
You might like
PHP实现的增强性mhash函数
2015/05/27 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
python统计文本文件内单词数量的方法
2015/05/30 Python
详解Django框架中的视图级缓存
2015/07/23 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
Python Django中间件,中间件函数,全局异常处理操作示例
2019/11/08 Python
jupyter notebook清除输出方式
2020/04/10 Python
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
Skyscanner波兰:廉价航班
2017/11/07 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
粗加工管理制度
2014/02/04 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
英雄儿女观后感
2015/06/09 职场文书
idea 在springboot中使用lombok插件的方法
2021/08/02 Java/Android
python基础之文件操作
2021/10/24 Python