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 组件注册
Nov 20 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
vue实现树状表格效果
Dec 29 Vue.js
vue+element UI实现树形表格
Dec 29 Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
vue+flask实现视频合成功能(拖拽上传)
Mar 04 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
Vue.Draggable实现交换位置
Apr 07 Vue.js
vue3不同环境下实现配置代理
May 25 Vue.js
Vue Element plus使用方法梳理
Dec 24 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/06/07 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
Shell编程面试题
2016/05/29 面试题
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
Linux安装apache服务器的配置过程
2021/11/27 Servers
Nginx如何获取自定义请求header头和URL参数详解
2022/07/23 Servers