vue环形进度条组件实例应⽤
在做项⽬的时候,最好只使⽤⼀套组件库,但是很多时候我们的组件库⾥⾯没有我们需要的组件,这个时候我们还是需要⾃⼰写组件了,vux⾥⾯就没有环形进度条组件,所以需要⾃⼰写⼀个。
查资料后发现了⼀个很好的实现⽅式,通过svg来实现,以前的时候学过⼀点svg但是没有怎么深⼊了解过。。。现在看来真是罪过,给出参考链接
可以看出原作者使⽤了两种⽅式,我们选择了第⼆种,简单,⽽且好扩展。可以看到svg就想是canvas⼀样进⾏绘图。原⽂已经讲得很详细了,这⾥就附上⾃⼰写的组件吧。伸⼿党们也能愉快⼀点。
<template>
<svg :height="option.size" :width="option.size" x-mlns="/200/svg">
<circle
:r="option.radius"
:cx=""
:
cy=""
:stroke="option.outerColor"
:stroke-width="option.strokeWidth"
fill="none"
stroke-linecap="round"/>
<circle
id="progressRound"
:stroke-dasharray="completenessHandle"
:r="option.radius"
:cx=""
:cy=""
:
stroke-width="option.strokeWidth"
:stroke="option.innerColor"
fill="none"
class="progressRound"
/>
</svg>
</template>
<script>
export default {
name: 'CommonLoopProgress',
props: {
completeness: {
type: Number,
required: true,
},
progressOption: {
type: Object,
default: () => {},
},
},
data () {
return {
}
},
computed: {
completenessHandle () {
let circleLength = Math.floor(2 * Math.PI * this.option.radius)
let completenessLength = thispleteness * circleLength
return `${completenessLength},100000000`
},
svg canvasoption () {
// 所有进度条的可配置项
let baseOption = {
radius: 20,
strokeWidth: 5,
outerColor: '#E6E6E6',
innerColor: '#FFDE00',
}
Object.assign(baseOption, this.progressOption)
// 中⼼位置⾃动⽣成
< = = baseOption.radius + baseOption.strokeWidth
baseOption.size = (baseOption.radius + baseOption.strokeWidth) * 2
return baseOption
},
},
}
</script>
<style scoped lang='stylus'>
@import '~stylus/_variables.styl';
@import '~stylus/_mixins.styl';
.progressRound {
transform-origin: center;
transform: rotate(-90deg);
transition: stroke-dasharray 0.3s ease-in;
}
</style>
修改了原⽂中的⼀些不好的命名⽅式,并且让我们的组件⽅便配置,可以⾃由⼀点。以上就是本次知识点的全部内容,感谢⼤家对的⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论