Vue.js로 타이머 구성 요소 만들기
18128 단어 Vue.js
Vue.js로 타이머 구성 요소 만들기
왜냐하면 저는 개인적인 취미로 만든 앱을 통해 타이머 기능을 얻고 싶어요.
Vue.js로 구성 요소를 만들었습니다.
※ 10배 속도로 재생.
코드
Timer.vue<template>
<div id="timer">
<div class="timer">
<div class="time">
{{ formatTime }}
</div>
<button v-on:click="start" v-if="!timerOn">Start</button>
<button v-on:click="stop" v-if="timerOn">Stop</button>
</div>
</div>
</template>
<script>
export default {
name: 'timer',
data() {
return {
min: 59,
sec: 59,
timerOn: false,
timerObj: null,
}
},
methods: {
count: function() {
if (this.sec <= 0 && this.min >= 1) {
this.min --;
this.sec = 59;
} else if(this.sec <= 0 && this.min <= 0) {
this.complete();
} else {
this.sec --;
}
},
start: function() {
let self = this;
this.timerObj = setInterval(function() {self.count()}, 1000)
this.timerOn = true; //timerがONであることを状態として保持
},
stop: function() {
clearInterval(this.timerObj);
this.timerOn = false; //timerがOFFであることを状態として保持
},
complete: function() {
clearInterval(this.timerObj)
}
},
computed: {
formatTime: function() {
let timeStrings = [
this.min.toString(),
this.sec.toString()
].map(function(str) {
if (str.length < 2) {
return "0" + str
} else {
return str
}
})
return timeStrings[0] + ":" + timeStrings[1]
}
}
}
</script>
<style scoped>
#timer {
display: flex;
align-items: center;
justify-content: center;
}
.time {
font-size: 100px;
}
</style>
해설
데이터 섹션
Timer.vue...
<script>
data() {
return {
min: 59,
sec: 59,
timerOn: false,
timerObj: null,
}
}
...
</script>
min→분수(Integer)
sec→초(Integer)
timerOn: 타이머의 ON/OFF (Boolean) ※ Start/Stop 버튼 표시 전환에 사용
timer를 중지할 setTimeout을 저장합니다.
method 부분
Timer.vue
<script>
...
methods: {
// count関数 = setIntervalにより毎秒呼ばれる関数
// ①0秒以下 && 1分を切っていない → 分数を-1、秒を59にリセット
// ②0秒以下 && 0分台 → 終了
// ③それ以外 → 秒数を-1
count: function() {
if (this.sec <= 0 && this.min >= 1) {
this.min --;
this.sec = 59;
} else if(this.sec <= 0 && this.min <= 0) {
this.complete();
} else {
this.sec --;
}
},
start: function() {
let self = this;
this.timerObj = setInterval(function() {self.count()}, 1000)
this.timerOn = true
},
stop: function() {
clearInterval(this.timerObj);
this.timerOn = false
},
complete: function() {
clearInterval(this.timerObj)
}
},
...
</script>
컴퓨터 부분
Timer.vue<script>
...
computed: {
formatTime: function() {
let timeStrings = [
this.min.toString(),
this.sec.toString()
].map(function(str) {
if (str.length < 2) {
return "0" + str
} else {
return str
}
})
return timeStrings[0] + ":" + timeStrings[1]
}
...
</script>
분수, 초를 한 자릿수로 표시할 때 01을 표시하려면string을 사용하십시오.
template 섹션
Timer.vue<template>
<div id="timer">
<div class="timer">
<div class="time">
{{ formatTime }}
</div>
<!-- タイマーのON/OFFによってボタンを切り替える -->
<button v-on:click="start" v-if="!timerOn">Start</button>
<button v-on:click="stop" v-if="timerOn">Stop</button>
</div>
</div>
</template>
Reference
이 문제에 관하여(Vue.js로 타이머 구성 요소 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moriwm77/items/5d5430c80cfccd5fb397
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Timer.vue
<template>
<div id="timer">
<div class="timer">
<div class="time">
{{ formatTime }}
</div>
<button v-on:click="start" v-if="!timerOn">Start</button>
<button v-on:click="stop" v-if="timerOn">Stop</button>
</div>
</div>
</template>
<script>
export default {
name: 'timer',
data() {
return {
min: 59,
sec: 59,
timerOn: false,
timerObj: null,
}
},
methods: {
count: function() {
if (this.sec <= 0 && this.min >= 1) {
this.min --;
this.sec = 59;
} else if(this.sec <= 0 && this.min <= 0) {
this.complete();
} else {
this.sec --;
}
},
start: function() {
let self = this;
this.timerObj = setInterval(function() {self.count()}, 1000)
this.timerOn = true; //timerがONであることを状態として保持
},
stop: function() {
clearInterval(this.timerObj);
this.timerOn = false; //timerがOFFであることを状態として保持
},
complete: function() {
clearInterval(this.timerObj)
}
},
computed: {
formatTime: function() {
let timeStrings = [
this.min.toString(),
this.sec.toString()
].map(function(str) {
if (str.length < 2) {
return "0" + str
} else {
return str
}
})
return timeStrings[0] + ":" + timeStrings[1]
}
}
}
</script>
<style scoped>
#timer {
display: flex;
align-items: center;
justify-content: center;
}
.time {
font-size: 100px;
}
</style>
해설
데이터 섹션
Timer.vue...
<script>
data() {
return {
min: 59,
sec: 59,
timerOn: false,
timerObj: null,
}
}
...
</script>
min→분수(Integer)
sec→초(Integer)
timerOn: 타이머의 ON/OFF (Boolean) ※ Start/Stop 버튼 표시 전환에 사용
timer를 중지할 setTimeout을 저장합니다.
method 부분
Timer.vue
<script>
...
methods: {
// count関数 = setIntervalにより毎秒呼ばれる関数
// ①0秒以下 && 1分を切っていない → 分数を-1、秒を59にリセット
// ②0秒以下 && 0分台 → 終了
// ③それ以外 → 秒数を-1
count: function() {
if (this.sec <= 0 && this.min >= 1) {
this.min --;
this.sec = 59;
} else if(this.sec <= 0 && this.min <= 0) {
this.complete();
} else {
this.sec --;
}
},
start: function() {
let self = this;
this.timerObj = setInterval(function() {self.count()}, 1000)
this.timerOn = true
},
stop: function() {
clearInterval(this.timerObj);
this.timerOn = false
},
complete: function() {
clearInterval(this.timerObj)
}
},
...
</script>
컴퓨터 부분
Timer.vue<script>
...
computed: {
formatTime: function() {
let timeStrings = [
this.min.toString(),
this.sec.toString()
].map(function(str) {
if (str.length < 2) {
return "0" + str
} else {
return str
}
})
return timeStrings[0] + ":" + timeStrings[1]
}
...
</script>
분수, 초를 한 자릿수로 표시할 때 01을 표시하려면string을 사용하십시오.
template 섹션
Timer.vue<template>
<div id="timer">
<div class="timer">
<div class="time">
{{ formatTime }}
</div>
<!-- タイマーのON/OFFによってボタンを切り替える -->
<button v-on:click="start" v-if="!timerOn">Start</button>
<button v-on:click="stop" v-if="timerOn">Stop</button>
</div>
</div>
</template>
Reference
이 문제에 관하여(Vue.js로 타이머 구성 요소 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moriwm77/items/5d5430c80cfccd5fb397
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
...
<script>
data() {
return {
min: 59,
sec: 59,
timerOn: false,
timerObj: null,
}
}
...
</script>
Timer.vue
<script>
...
methods: {
// count関数 = setIntervalにより毎秒呼ばれる関数
// ①0秒以下 && 1分を切っていない → 分数を-1、秒を59にリセット
// ②0秒以下 && 0分台 → 終了
// ③それ以外 → 秒数を-1
count: function() {
if (this.sec <= 0 && this.min >= 1) {
this.min --;
this.sec = 59;
} else if(this.sec <= 0 && this.min <= 0) {
this.complete();
} else {
this.sec --;
}
},
start: function() {
let self = this;
this.timerObj = setInterval(function() {self.count()}, 1000)
this.timerOn = true
},
stop: function() {
clearInterval(this.timerObj);
this.timerOn = false
},
complete: function() {
clearInterval(this.timerObj)
}
},
...
</script>
컴퓨터 부분
Timer.vue
<script>
...
computed: {
formatTime: function() {
let timeStrings = [
this.min.toString(),
this.sec.toString()
].map(function(str) {
if (str.length < 2) {
return "0" + str
} else {
return str
}
})
return timeStrings[0] + ":" + timeStrings[1]
}
...
</script>
분수, 초를 한 자릿수로 표시할 때 01을 표시하려면string을 사용하십시오.template 섹션
Timer.vue
<template>
<div id="timer">
<div class="timer">
<div class="time">
{{ formatTime }}
</div>
<!-- タイマーのON/OFFによってボタンを切り替える -->
<button v-on:click="start" v-if="!timerOn">Start</button>
<button v-on:click="stop" v-if="timerOn">Stop</button>
</div>
</div>
</template>
Reference
이 문제에 관하여(Vue.js로 타이머 구성 요소 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moriwm77/items/5d5430c80cfccd5fb397텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)