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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
vue使用vant中的checkbox实现全选功能
Nov 17 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue中 this.$set的使用详解
Nov 17 Vue.js
vue实现移动端div拖动效果
Mar 03 Vue.js
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 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
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
Angularjs 基础入门
2014/12/26 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
JavaScript模拟push
2016/03/06 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
jquery写出PC端轮播图实例
2018/01/26 jQuery
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
机电专业毕业生求职信
2013/10/27 职场文书
三严三实对照检查材料
2014/08/25 职场文书
加强作风建设工作总结
2014/10/23 职场文书
初中作文评语
2014/12/25 职场文书
导游词400字
2015/02/13 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
入党介绍人意见范文
2015/06/01 职场文书
python文件目录操作之os模块
2021/05/08 Python
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
MySQL如何使备份得数据保持一致
2022/05/02 MySQL