创建一个响应式圆柱形进度条组件
在现代网页设计中,圆柱形进度条是一种非常流行的视觉元素,用于展示数据的进度或状态。本文将介绍如何使用Vue.js和LESS创建一个响应式的圆柱形进度条组件。
组件结构
我们的组件由两部分组成:一个圆柱形的进度条和一个文本框。进度条部分由.lui-column-bg
类定义,它包含一个.lui-inner
类的子元素,用于显示实际的进度。文本框部分由.text-box
类定义,用于显示标签和值。
样式设计
我们使用LESS来定义组件的样式,以提高代码的可维护性和可读性。.lui-column-bg
类设置了进度条的基本尺寸和背景色,同时使用:before
和:after
伪元素来创建圆柱形的顶部和底部。.lui-inner
类定义了进度条的内部颜色和高度,使用linear-gradient
来创建渐变效果。
我们还定义了三个类(.danger-class
、.warning-class
和.success-class
),这些类根据进度条的高度变化而变化,以显示不同的状态。这些类通过修改背景色和伪元素的背景色来实现不同的视觉效果。
Vue.js逻辑
在Vue.js中,我们定义了Cylinder
组件,它接收label
和height
两个props。label
用于显示文本框中的标签,而height
用于控制进度条的高度。我们使用计算属性colorClass
来根据height
的值动态改变进度条的类,从而改变其颜色。
使用组件
要使用这个组件,你只需要在Vue.js项目中导入并注册它,然后在模板中像使用其他Vue组件一样使用它。例如:
<Cylinder label="完成率" :height="75" />
这将创建一个标签为“完成率”的圆柱形进度条,进度为75%。
组件代码
代码如下:
<template>
<div class="lui-column-bg">
<div
class="lui-inner"
:class="colorCLass"
:style="{ height: height + '%' }"
></div>
<div class="text-box">
<p class="label">{{ label }}</p>
<p class="value">{{ height ? height + "%" : "" }}</p>
</div>
</div>
</template>
<script>
export default {
name: "Cylinder",
props: {
label: { type: String, default: "" },
height: { type: Number, default: 50 } // 这个就是圆柱中的数据占比 +
},
data() {
return {};
},
computed: {
colorCLass() {
if (this.height >= 80) {
return "success-class";
}
if (this.height >= 30) {
return "warning-class";
}
return "danger-class";
}
},
mounted() {},
methods: {}
};
</script>
<style lang="less" scoped>
.lui-column-bg {
position: relative;
width: 100px;
height: 140px;
margin: 0 auto;
background-color: #d1d1d1;
margin: 100px;
}
.lui-column-bg:before {
position: absolute;
content: "";
display: block;
height: 20px;
width: 100%;
border-radius: 50%;
top: -10.5px;
z-index: 1;
background-color: #e8e8e8;
}
.lui-column-bg:after {
position: absolute;
content: "";
display: block;
height: 30px;
width: 100%;
border-radius: 50%;
bottom: -15px;
background-color: #e8e8e8;
}
.lui-inner {
position: absolute;
bottom: 0;
width: 100%;
height: 50%;
background-image: linear-gradient(to top, rgb(0, 255, 204), rgb(0, 199, 159));
background-color: #eaaa00;
text-align: center;
}
.lui-inner::before {
position: absolute;
content: "";
display: block;
height: 20px;
width: 100%;
background-color: #eec967;
border-radius: 50%;
top: -10.5px;
z-index: 1;
}
.lui-inner:after {
position: absolute;
z-index: 10;
content: "";
display: block;
height: 30px;
width: 100%;
border-radius: 50%;
background-color: #eaaa00;
bottom: -14px;
}
.text-box {
position: absolute;
z-index: 20;
font-size: 14px;
top: 50%;
text-align: center;
width: 100%;
.label {
margin-bottom: 10px;
}
.value {
color: #fff;
}
}
.danger-class {
background-color: #e1677a;
&::before {
background-color: #f294a0;
}
&::after {
background-color: #e1677a;
}
}
.success-class {
background-color: #42b029;
&::before {
background-color: #86dd72;
}
&::after {
background-color: #42b029;
}
}
.warning-class {
background-color: #eaaa00;
&::before {
background-color: #eec967;
}
&::after {
background-color: #eaaa00;
}
}
</style>
结论
通过结合Vue.js和LESS,我们可以轻松创建一个功能丰富且视觉吸引的圆柱形进度条组件。这个组件不仅响应式,而且易于定制和扩展,适用于各种不同的应用场景。希望这篇文章能帮助你在项目中实现类似的组件。