视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
vue环形进度条组件实例应用
2020-11-27 22:06:21 责编:小采
文档


在做项目的时候,最好只使用一套组件库,但是很多时候我们的组件库里面没有我们需要的组件,这个时候我们还是需要自己写组件了,vux里面就没有环形进度条组件,所以需要自己写一个。

查找资料后发现了一个很好的实现方式,通过svg来实现,以前的时候学过一点svg但是没有怎么深入了解过。。现在看来真是罪过,给出参考链接

https://segmentfault.com/a/1190000008149403

可以看出原作者使用了两种方式,我们选择了第二种,简单,而且好扩展。可以看到svg就想是canvas一样进行绘图。原文已经讲得很详细了,这里就附上自己写的组件吧。伸手党们也能愉快一点。

<template>
 <svg :height="option.size" :width="option.size" x-mlns="http://www.w3.org/200/svg">
 <circle
 :r="option.radius"
 :cx="option.cx"
 :cy="option.cy"
 :stroke="option.outerColor"
 :stroke-width="option.strokeWidth"
 fill="none"
 stroke-linecap="round"/>
 <circle
 id="progressRound"
 :stroke-dasharray="completenessHandle"
 :r="option.radius"
 :cx="option.cx"
 :cy="option.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 = this.completeness * circleLength
 return `${completenessLength},100000000`
 },
 option () {
 // 所有进度条的可配置项
 let baseOption = {
 radius: 20,
 strokeWidth: 5,
 outerColor: '#E6E6E6',
 innerColor: '#FFDE00',
 }
 Object.assign(baseOption, this.progressOption)
 // 中心位置自动生成
 baseOption.cy = baseOption.cx = 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>

修改了原文中的一些不好的命名方式,并且让我们的组件方便配置,可以自由一点。

下载本文
显示全文
专题