Nuxtでストップウォッチ(タイマー)を作る
Vue.js&Nuxt.js超入門 を読みました。
アウトプットとして、タイムトラッキング機能のあるシンプルなタスク管理ツールを作ろうと思います。
ということで、まずはタイマーを作っていきましょう。
pages/index.vue
data () {
return {
sec: 0,
timerOn: false,
timerObj: null,
}
},
methods: {
count: function() {
this.sec += 1
},
start: function() {
var self = this;
this.timerObj = setInterval(function() {self.count()}, 1000)
this.timerOn = true;
},
stop: function() {
// ここにタイムを保存する処理を書く
this.sec = 0
clearInterval(this.timerObj);
this.timerOn = false;
},
使用する関数はこんな感じ。時間は秒数で保持しておき、表示する際にHH:MM:SS表記に直します。
1秒ごとにインクリメントしていくtimerObj
を用意してあげるのが肝ですね。timeOn
はタイマーのスタートボタンとストップボタンを切り替えるのに用います。
template部を書いてあげて、
pages/index.vue
<div>
{{ formatTime }}
<br>
<b-button @click="start" v-if="!timerOn">start</b-button>
<b-button @click="stop" v-if="timerOn">stop</b-button>
</div>
秒をHH:MM:SS表記に直す処理は汎用性があるので、mixinに書いていきます。
pages/index.vue
computed: {
formatTime: function() {
return this.SecToTime(this.sec)
},
},
plugins/mixin-common-methods.js
import Vue from 'vue'
Vue.mixin({
methods: {
SecToTime: function(rawsec){
var sec = String((rawsec % 60)%60)
if (sec.length == 1){sec = "0" + sec}
var min = String(Math.floor(rawsec / 60) % 60)
if (min.length == 1){min = "0" + min}
var hour = String(Math.floor(rawsec / 3600))
if (hour.length == 1){hour = "0" + hour}
var time = hour + ":" + min + ":" + sec
return time
},
},
})
これにて完成です。
あとはタスク管理機能とうまく組み合わせていきたいと思います。
https://github.com/hukurouo/tasktime
今はこんな感じ。Buefyを初めて使ってみましたが、マテリアル度が高くてよいですね。