最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue+scss白天和夜间模式切换功能的实现方法

    正文概述 掘金(天小天)   2021-01-04   466

    Vue+scss白天和夜间模式切换功能的实现方法 图片被压缩了不够清晰。

    1. 安装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
    
    1. 新建页面DarkModelPage.vue
    <template>
        <div id="DarkModelPage">
            
        </div>
    </template>
    
    <script>
    export default {
        
    }
    </script>
    
    <style scoped lang="scss">
    
    </style>
    
    1. 在src/assets新建目录scss

    2. 在src/assets/scss新建目录common

    3. 然后需要新建三个scss文件分别是

    1. _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), // 主文本色
      )
    );
    
    
    1. _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;
      }
    }
    
    1. common.scss
    @import "@/assets/scss/common/_handle.scss";
    
    /**
    自定义的公共样式...
    **/
    
    1. 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>
    
    1. 注:如需更多颜色及样式切换,只需要在_themes.scss设置好变量,通过 _handle.scss设置切换函数,即可以在页面中通过该函数对指定样式进行设置。

    本文演示视频:点击浏览

    更多前端内容欢迎关注公众号:天小天个人网


    起源地下载网 » Vue+scss白天和夜间模式切换功能的实现方法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元