前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在线动态换肤思路

在线动态换肤思路

作者头像
wade
发布2020-09-22 16:24:38
1.1K0
发布2020-09-22 16:24:38
举报
文章被收录于专栏:coding个人笔记

很早之前就在想在线换肤的实现思路,主要是之前有个项目有换肤,连布局图片都不一样,无能为力,只好写不同页面,然后通过打包的时候配置删除和替代文件实现,但是在线换肤还是没去做。今天分享一下换肤的思路,只是单纯的颜色替换,没有包括连布局图片都不一样的换肤。

跟国际化一样,方案可能不难,难的是开发业务的时候很繁琐,写的不好就很难维护。最简单的一个方式,通过不同的css实现换肤,前提是确定好几个可供切换的css,效果:

代码很简单主要就是动态切换link引入的地址:

let link = document.getElementById('color');

link.setAttribute('href', type + '.css');

这种方法其实并不是很建议,一个是你必须提供很多css文件,另外一个就是你很难直接通过设置css的十六进制去换肤,方法也有,比如把十六进制传递给后台让后台生成一份文件之类的,总的来说比较low一点,如果只是固定几个皮肤这样的反而更简单。

另外一种是类似element-ui做的换肤,把颜色的样式都写在head头部的style标签里面,可以去看一下,当你换颜色的时候,style标签id为docs-style和chalk-style里面的颜色就会被替换。可以去看看:

https://element.eleme.cn/#/zh-CN/theme/preview

自己简单做了个效果,效果跟上面是一样的,代码:

<style id="colorId">

.bg{

background: #00aaee;

}

.text{

color: #00aaee;

}

</style>

<li><button class="bg" onclick="changeColor('00aaee')">a皮肤</button></li>

<li><button class="bg" onclick="changeColor('00ee57')">b皮肤</button></li>

<li><button class="bg" onclick="changeColor('ee0043')">c皮肤</button></li>

let currentColor = '00aaee';

function changeColor(color) {

let reg = new RegExp(currentColor,'g');

let sty = document.getElementById('colorId');

let str = sty.innerHTML;

str = str.replace(reg, color);

sty.innerHTML = str;

currentColor = color;

}

我这边只是提供个思路,真正要实现起来当然要复杂一些,颜色肯定不止一个,element是颜色对应一个关键字的数组,然后把style里面的颜色都先替换成关键字,然后再根据颜色生成对应的数组,接着把关键字替换回颜色,最后写入style标签。

还有一种css自定义变量的方式,这我还真是前几天才知道的,是一个大佬告知的,这个css很早就出现了,只是一直不知道:

:root {

--bg: #00aaee;

--color: #00aaee;

}

.bg{

background: var(--bg);

}

.text{

color: var(--color);

}

function changeColor(color) {

document.body.style.setProperty('--bg', '#' + color);

document.body.style.setProperty('--color', '#' + color);

}

很简单,查一下css自定义变量就知道怎么使用了。本来觉得这个自定义变量是真没什么意义,发现 这样一用,反而觉得换肤功能会简单很多。

另外一种antd利用 Less 的变量以及在浏览器编译没有去实验一下,本地连antd的官网都打不开。还有之前有提到过的css in js在这种换肤场景下好像也非常的合适。

自己知道的在线换肤的思路只有这三种了,如果真的有需求要做在线换肤功能,还真不知道哪种会比较好,只能是自己选型了,真正涉及项目的时候,可不只是这样说说而已,会碰见什么坑就不好说了。讲道理,现在应该没多少在线换肤的功能网站了吧。

自己感觉还是有点不对劲,希望有做过换肤项目的(不只是demo)可以指点一波。

(完)

Coding 个人笔记

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档