0
点赞
收藏
分享

微信扫一扫

Vue 动态换肤

RIOChing 2022-10-15 阅读 49


效果如图:


Vue 动态换肤_自定义

Vue 动态换肤_赋值_02

Vue 动态换肤_css_03

Vue 动态换肤_css_04

源代码:

<template>
<div :class="[`son${temp}`]" class="demo3">
这是四点零八分的北京<br/>
一片手的海浪翻动<br/>
这是四点零八分的北京<br/>
一声雄伟的汽笛长鸣<br/>
北京车站高大的建筑<br/>
突然一阵剧烈地抖动<br/>
我双眼吃惊地望着窗外<br/>
不知发生了什么事情
<div class="footer">
<div v-for="(i,d) in 4" :key="d" @click="temp = i" :class="[`son${temp}`]" class="button">皮肤{{i}}</div>
</div>
</div>
</template>
<script>export default {
data() {
return {
temp: 1, // 皮肤参数
}
}
}</script>
<style lang="scss" scoped>.footer {
position: fixed;
left: 10vw;
bottom: 10vh;
display: flex;
.button {
width: 80px;
height: 40px;
margin-right: 20px;
border-radius: 6px;
}
}
.son1 {
font-family: 华文新魏;
font-size: 22px;
line-height: 2;
background-image: linear-gradient(35deg, #f99 50%, #99f 100%);
}
.son2 {
font-family: 方正舒体;
font-size: 26px;
line-height: 2;
background-image: linear-gradient(-60deg, rgb(168, 135, 135) 50%, rgb(122, 122, 156) 100%);
}
.son3 {
font-family: 隶书;
font-size: 20px;
line-height: 2;
background-image: linear-gradient(135deg, rgb(181, 196, 132) 50%, rgb(78, 78, 173) 100%);
}
.son4 {
font-family: 仿宋;
font-size: 26px;
line-height: 2;
background-image: linear-gradient(60deg, rgb(214, 232, 157) 50%, rgb(149, 170, 134) 100%);
}
.demo3 {
width: 100%;
height: 100vh;
padding: 20px;
}</style>

设计思路:

规划几套样式,通过动态class 或 scss 混入 @include 等方式进行赋值,给最外层的父元素添加全局样式。涉及到跨页面操作,可以将class转化为JSON字符串存在storage 或vuex 里,或者封装进公用组件,把每个页面不同的内容以插槽的形式插入。

其它应用场景如: 天地图自定义覆盖物,轮播图自定义指示点

相关图片如下:

Vue 动态换肤_vue.js_05

Vue 动态换肤_自定义_06


Vue 动态换肤_赋值_07


Vue 动态换肤_自定义_08


举报

相关推荐

手写动态换肤

Vue换肤主题

vue less 换肤

【无标题】vue换肤

vue实现换肤功能

手撸动态换肤框架(二)

0 条评论