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可视化库的完整步骤记录
Nov 18 Vue.js
在Vue中使用mockjs代码实例
Nov 25 Vue.js
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
如何使用vue3打造一个物料库
May 08 Vue.js
VUE中的v-if与v-show区别介绍
Mar 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
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
如何离线执行php任务
2017/02/21 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
函授药学自我鉴定
2014/02/07 职场文书
审计专业自荐信范文
2014/04/21 职场文书
职位说明书范文
2014/05/07 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
女性励志书籍推荐
2019/08/19 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
解析Redis Cluster原理
2021/06/21 Redis
尝试使用Python爬取城市租房信息
2022/04/12 Python
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技