Vue 圆圈形进度条
vue圆圈形进度条
·
圆圈形进度条在开发中经常遇到,这里把他封装成一个组件,实现方式为使用svg画图。
下面的代码中涉及到了svg的viewBox属性,按照张鑫旭大神的说法:SVG就像是我们的显示器屏幕,viewBox就是截屏工具选中的那个框框,最终的呈现就是把框框中的截屏内容再次在显示器中全屏显示。在本次设计的圆圈形进度条中,主要由两个圆圈实现,一个圆圈颜色较浅大小不变,另一个颜色较深,使用stroke-dasharray和stroke-dashoffset属性来控制。stroke-dasharray设置和圆圈的半径相等(这里采用v-bind方式是因为直接写数字会被认为是文字),stroke-dashoffset设置收尾间距。
使用时,传入半径和圆圈有效部分所占比例,收尾之间的间距会被自动设置:
dashOffset() {
return (1 - this.percent) * this.dashArray
}
//progeress-circle.vue
<template>
<div class="progress-circle">
<svg :width="radius" :height="radius" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg">
<circle class="progress-background" r="50" cx="50" cy="50" fill="transparent"/>
<circle class="progress-bar" r="50" cx="50" cy="50" fill="transparent" :stroke-dasharray="dashArray"
:stroke-dashoffset="dashOffset"/>
</svg>
<slot></slot>
</div>
</template>
<script type="text/ecmascript-6">
export default {
props: {
radius: {
type: Number,
default: 100
},
percent: {
type: Number,
default: 0
}
},
data() {
return {
dashArray: Math.PI * 100
}
},
computed: {
dashOffset() {
return (1 - this.percent) * this.dashArray
}
}
}
</script>
<style scoped lang="stylus" rel="stylesheet/stylus">
@import "~common/stylus/variable"
.progress-circle
position: relative
circle
stroke-width: 8px
transform-origin: center
&.progress-background
transform: scale(0.9)
stroke: $color-theme-d
&.progress-bar
transform: scale(0.9) rotate(-90deg)
stroke: $color-theme
</style>
//使用progress-circle
<progress-circle :radius="radius" :percent="percent"></progress-circle>
更多推荐
已为社区贡献6条内容
所有评论(0)