首页 > 其他分享 >vue 实现自定义主题切换+日夜切换

vue 实现自定义主题切换+日夜切换

时间:2023-07-14 14:35:21浏览次数:34  
标签:vue return 自定义 hex rgb sColor let 切换 var

此处只参考 修改主题色, 日夜模式参考elep官网

function gradientColor(this: any, startColor: any, endColor: any, step: any) {
    let startRGB = gradientColor.prototype.colorRgb(startColor);//转换为rgb数组模式
    let startR = startRGB[0];
    let startG = startRGB[1];
    let startB = startRGB[2];
    let endRGB = gradientColor.prototype.colorRgb(endColor);
    let endR = endRGB[0];
    let endG = endRGB[1];
    let endB = endRGB[2];
    let sR = (endR - startR) / step;//总差值
    let sG = (endG - startG) / step;
    let sB = (endB - startB) / step;
    var colorArr = [];
    for (var i = 0; i < step; i++) {
        //计算每一步的hex值 
        var hex = gradientColor.prototype.colorHex('rgb(' + parseInt((sR * i + startR)) + ',' + parseInt((sG * i + startG)) + ',' + parseInt((sB * i + startB)) + ')');
        colorArr.push(hex);
    }
    return colorArr;
}
// 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)
gradientColor.prototype.colorRgb = function (sColor: any) {
    var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
    var sColor = sColor.toLowerCase();
    if (sColor && reg.test(sColor)) {
        if (sColor.length === 4) {
            var sColorNew = "#";
            for (var i = 1; i < 4; i += 1) {
                sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
            }
            sColor = sColorNew;
        }
        //处理六位的颜色值
        var sColorChange = [];
        for (var i = 1; i < 7; i += 2) {
            sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
        }
        return sColorChange;
    } else {
        return sColor;
    }
};
// 将rgb表示方式转换为hex表示方式
gradientColor.prototype.colorHex = function (rgb: any) {
    var _this = rgb;
    var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
    if (/^(rgb|RGB)/.test(_this)) {
        var aColor = _this.replace(/(?:(|)|rgb|RGB)*/g, "").split(",");
        var strHex = "#";
        for (var i = 0; i < aColor.length; i++) {
            var hex: any = Number(Number(aColor[i]).toString(16));
            hex = hex < 10 ? 0 + '' + hex : hex;// 保证每个rgb的值为2位
            if (hex === "0") {
                hex += hex;
            }
            strHex += hex;
        }
        if (strHex.length !== 7) {
            strHex = _this;
        }
        return strHex;
    } else if (reg.test(_this)) {
        var aNum = _this.replace(/#/, "").split("");
        if (aNum.length === 6) {
            return _this;
        } else if (aNum.length === 3) {
            var numHex = "#";
            for (var i = 0; i < aNum.length; i += 1) {
                numHex += (aNum[i] + aNum[i]);
            }
            return numHex;
        }
    } else {
        return _this;
    }
}
export default { gradientColor }
View Code

 

//设置主题色
const setTheme = (colorName: string, color: string): void => {
    const el = document.documentElement
    const oldColor = getComputedStyle(el).getPropertyValue(`--c-base`).trim()
    let gradient: any = getColorArr.gradientColor(color, oldColor, 10);
    gradient.forEach((item: string, index: number) => {
        if (index === 0) el.style.setProperty(`${colorName}`, item)
        if (index === 9) return
        el.style.setProperty(`${colorName}-light-${index + 1}`, item)
    })
}
View Code

 

https://gitee.com/hwd19981214/my-home/tree/theme/

 

https://blog.csdn.net/qq_43223007/article/details/127520694

标签:vue,return,自定义,hex,rgb,sColor,let,切换,var
From: https://www.cnblogs.com/-roc/p/17553596.html

相关文章

  • Vue2的安装
    Vue的安装根据需求分为script标签引入与npm命令创建项目。1. script引入用途:用于不改动老项目源代码的二次开发。   使用方式:在html中嵌入vue.global.js的script标签的引入。代码示范图:  2. npm命令创建项目前提:npm是Node.JS自带的指令,如果需要使......
  • java8 自定义函数编程
    Java8自定义函数编程在传统的Java编程中,我们通常使用面向对象的方式来组织代码。然而,在某些场景下,面向对象的方式并不是最合适的选择。Java8引入了函数式编程的概念,提供了一些新的特性,例如Lambda表达式和函数接口,使得我们可以更方便地进行函数式编程。Lambda表达式Lambda表达......
  • vue 使用document.execCommand失效
    document.execCommand当一个HTML文档切换到设计模式时,document暴露 execCommand 方法,该方法允许运行命令来操纵可编辑内容区域的元素。大多数命令影响document的 selection(粗体,斜体等),当其他命令插入新元素(添加链接)或影响整行(缩进)。当使用contentEditable时,调用 execComman......
  • vite+vue3+minio
    之前h5用的minio上传文件,现在web端也需要用这个,但h5是用的vue2,web用的vue3,就出现了一些问题 架子是用的vite搭建的,但vite不支持require导入。用import的话minio不支持import引入,也会报错一.用vue2搭个项目,将minio通过require方式导入,再进行导出,上传npm,然后再npminstall......
  • java设置excel自定义列宽
    Java设置Excel自定义列宽在Java中,我们经常需要操作Excel文件。Excel文件的列宽度对于数据的展示非常重要。默认情况下,Excel中的列宽度是根据内容自动调整的,但有时我们需要手动设置列宽度来确保数据的可读性和美观性。本文将介绍如何使用Java程序来设置Excel文件的自定义列宽。使......
  • nvm使用便捷的node环境切换
    第一步下载nvm:https://nvm.en.softonic.com/第二步修改镜像地址:cmd->nvmroot得到nvm安装目录复制以上地址,打开位置,找到settings.txt,加入以下镜像地址node_mirror:https://npm.taobao.org/mirrors/node/npm_mirror:https://npm.taobao.org/mirrors/npm/第三步:nvminstal......
  • vue 组件分享
    应用场景是tab切换,上方显示五个标题,下方区域显示各模块内容分享的原因是这个写法简介父组件如下:<template><Tabsv-model="selected"@on-click="change_item"><TabPanev-for="iteminlist_tab":key="item.name":lab......
  • 前端uni-app自定义精美全端复制文本插件,支持全端文本复制插件 可设置复制按钮颜色
    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率......
  • Vue项目配置Https双向认证
    访问双向认证的Https接口本地运行设置修改webpack配置 jsconstfs=require('fs')constoptions={//客户端密钥key:fs.readFileSync(path.join(__dirname,'../ca/key.pem')),//客户端公钥cert:fs.readFileSync(path.join(__dirname,'../ca......
  • vue配置https
    constpath=require('path');constfs=require('fs');consthttps=require('https');constoptions={key:fs.readFileSync(path.join(__dirname,'./ca/client.key')),cert:fs.readFileSync(path.join(__dirname,......