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表单验证之禁止input输入框输入空格
Dec 03 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 Vue.js
vue watch监控对象的简单方法示例
Jan 07 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
详解Vue的options
May 15 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 Vue.js
vue判断按钮是否可以点击
Apr 09 Vue.js
vue自定义右键菜单之全局实现
Apr 09 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检测文件编码的方法示例
2014/04/25 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
2019/08/03 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
从零学Python之引用和类属性的初步理解
2014/05/15 Python
python将unicode转为str的方法
2017/06/21 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
python使用递归的方式建立二叉树
2019/07/03 Python
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
司机辞职报告范文
2014/01/20 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
2015年学校图书室工作总结
2015/05/19 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
利用python进行数据加载
2021/06/20 Python
python数字图像处理之图像的批量处理
2022/06/28 Python