アラーム機能のついたタイマー作成⏲
Timer
github
作成方法
① 現在日時の取得
const date = ref(new Date());
//年
const year = computed(() => date.value.getFullYear());
//月
const month = computed(() => date.value.getMonth() + 1);
//日
const day = computed(() => dateTimePadding(date.value.getDate()));
//時間
const hours = computed(() => dateTimePadding(date.value.getHours()));
//分
const minutes = computed(() => dateTimePadding(date.value.getMinutes()));
//秒
const seconds = computed(() => dateTimePadding(date.value.getSeconds()));
② 日時を2桁に変換
function dateTimePadding(num) {
return ("0" + num).slice(-2);
}
slice(-2)を使用し、引数が1桁の場合には文字列の後ろから2桁目までを取り出しています。
例えば、dateTimePadding(9)の場合、結果は"09"となります。
③ 現在日時をセット
function setDate() {
date.value = new Date();
}
onMounted(() => {
setDate();
setInterval(() => {
date.value = new Date();
}, 1000);
});
setDate関数でdate.valueに現在の日時がセットされています。
そして、onMountedフック内で初回の日時セットが行われ、その後はsetIntervalメソッドが1秒(1000ミリ秒後)ごとに新しい日時をdate.valueにセットしています。
※ このdate.valueは、ref関数で作成されたリアクティブなデータです。
setIntervalメソッドでdate.valueが変更されるたびに、関連する表示が更新され、現在の日時が表示されるようになります。
dateはref関数によってラップされているため、Vue.jsはdate.valueの変更を検知してコンポーネントの再描画を行います。
これにより、1秒ごとに新しい日時がセットされて表示が更新されます。
④ アラーム機能
<script setup>
const selectedTime = ref(10000);
function setAlarm() {
window.setTimeout(() => {
alert(`${selectedTime.value / 1000}秒経過しました!`);
}, selectedTime.value);
}
</script>
<template>
<div class="timer">
<p class="set">
<select v-model="selectedTime" class="set-time">
<option value="10000">10秒</option>
<option value="30000">30秒</option>
<option value="60000">1分</option>
<option value="300000">5分</option>
<option value="600000">10分</option>
<option value="1800000">30分</option>
</select>
後にアラーム
</p>
<span class="button" @click="setAlarm()">設定</span>
</div>
</template>
selectedTimeでデフォルトを10秒に設定しています。
v-model="selectedTime"を使用することで、selectedTimeという変数が<select>要素の値と双方向にバインディングされます。
これにより、<select>要素で選択されたオプションの値がselectedTimeに反映され、逆にselectedTimeの変更が<select>の選択肢に反映されます。
window.setTimeoutメソッドで、<select>要素で選択されたオプションの値が経過したら、アラームが表示されるように設定しています。
最後に
今回は、アラーム機能をつけたタイマーを作成してみましたが、まだまだJavascriptの知識不足やVue.jsの仕組み、機能の知識不足を感じています😅
日々努力をして少しずつでも前進し、たくさんの人の役に立てるようなAppが開発できるように頑張ります🦾🔥
Discussion