Vue.js SVG로 원형 차트 타이머 만들기
제한 시간 내에 무언가를하는 내용의 게임에서
제한 시간이 감소하면 원 그래프가 늘어나는 타이머를 작성해 보았습니다.
완성 이미지
소스는 여기입니다.
<template>
<div class="pieWp">
<svg width="100%" height="100%" viewBox="-1 -1 2 2" class="donut">
<!--背景-->
<circle cx="0" cy="0" r="1" fill="#dddddd" />
<path :d=calc :fill=color ></path>
</svg>
<p>{{nowTime}}</p>
</div>
</template>
<style lang="stylus">
.donut
transform rotate(-90deg)
</style>
<script>
import { TweenMax } from 'greensock';
export default {
data(){
return {
time: 6,
percent:1,
color: 'red',
startX:1,
startY:0,
currentPercent:0
}
},
methods: {
getPieVal(per){
const x = Math.cos(2 * Math.PI * per);
const y = Math.sin(2 * Math.PI * per);
return [x, y];
},
start(){
TweenMax.to(this.$data, this.time, {
currentPercent : this.$data.percent,
onComplete:this.complete,
ease: Power0.easeNone
});
},
complete(){
alert("Finish")
}
},
computed : {
calc(){
const [endX, endY] = this.getPieVal(this.$data.currentPercent);
const largeArcFlag = this.$data.currentPercent > .5 ? 1 : 0;
const pathData = [
`M ${this.$data.startX} ${this.$data.startY}`,
`A 1 1 0 ${largeArcFlag} 1 ${endX} ${endY}`,
`L 0 0`,
].join(' ');
return pathData;
},
nowTime(){
return Math.ceil(this.$data.time - this.$data.time * this.$data.currentPercent)
}
},
mounted(){
setTimeout(()=>{
this.start()
},100);
}
}
</script>
Codepen은 이쪽
※위의 코드를 버튼으로 시작하도록 변경하고 있습니다.
See the Pen Vue Pie by AsaToBan ( @ 아사토반 ) on CodePen .
SVG의 Path 태그는 이해하기 어렵습니다.
Canvas로 작성하는 편이 어느 쪽인가라고 하면 직관적으로 조작할 수 있을 것 같습니다.
이쪽을 개조한 인포그래픽 사이트등에서 잡을 것 같은 그래프판도 작성했으므로,
기회가 있으면 소개합니다.
아래 기사를 참고했습니다.
h tps : //는 c r의 온. 코 m / 아시 MP
Reference
이 문제에 관하여(Vue.js SVG로 원형 차트 타이머 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AsaToBan/items/da7dd45da78de6d98355텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)