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 tags 创建缓存导航的过程实现
Dec 03 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 Vue.js
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
开发一个封装iframe的vue组件
Mar 29 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
如何优化vue打包文件过大
Apr 13 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 批量替换程序的具体实现代码
2013/10/04 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
Vue.js实现的表格增加删除demo示例
2018/05/22 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
Python unittest单元测试框架总结
2018/09/08 Python
python提取xml里面的链接源码详解
2019/10/15 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
中间件分为哪几类
2012/03/14 面试题
项目建议书范文
2014/05/12 职场文书
机械专业求职信
2014/05/25 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
员工教育培训协议书
2014/09/27 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
公务员检讨书
2014/11/01 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL