mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.3 KiB
99 lines
2.3 KiB
<template>
|
|
<div>
|
|
<audio
|
|
ref="player"
|
|
:src="audioSrc"
|
|
preload="auto"
|
|
></audio>
|
|
<span ref="time">{{ title }}: {{ formatTime(time) }}<br/></span>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'Cronometro',
|
|
props: ['id', 'title'],
|
|
data() {
|
|
return {
|
|
time: 300,
|
|
isRunning: false,
|
|
initialTime: 300,
|
|
intervalId: null,
|
|
audioSrc: require('@/assets/audio/ring.mp3'),
|
|
}
|
|
},
|
|
mounted() {
|
|
console.log('Cronometro mounted');
|
|
console.log(this.audioSrc);
|
|
this.$emit('child-mounted'); // Emit a custom event
|
|
},
|
|
methods: {
|
|
changeFontSize(value) {
|
|
const el = this.$refs.time;
|
|
if (!el) return;
|
|
let fontSize = window.getComputedStyle(el).fontSize;
|
|
fontSize = parseFloat(fontSize); // safely convert "16px" → 16
|
|
el.style.fontSize = (fontSize + value) + 'px';
|
|
},
|
|
handleStartStop() {
|
|
this.isRunning = !this.isRunning;
|
|
|
|
if (this.isRunning) {
|
|
this.intervalId = setInterval(() => {
|
|
if (this.time > 0) {
|
|
this.time--;
|
|
// play buzz at 00:00:30
|
|
if (this.time == 30000) {
|
|
this.playSound();
|
|
}
|
|
} else {
|
|
this.isRunning = false;
|
|
clearInterval(this.intervalId);
|
|
this.playSound();
|
|
}
|
|
}, 1000);
|
|
} else {
|
|
clearInterval(this.intervalId);
|
|
}
|
|
},
|
|
|
|
handleReset() {
|
|
this.isRunning = false;
|
|
clearInterval(this.intervalId);
|
|
this.time = this.initialTime;
|
|
},
|
|
|
|
playSound() {
|
|
const audio = this.$refs.player
|
|
if (!audio) return
|
|
|
|
const playPromise = audio.play()
|
|
},
|
|
|
|
formatTime(seconds) {
|
|
const hrs = Math.floor(seconds / 3600);
|
|
const mins = Math.floor((seconds % 3600) / 60);
|
|
const secs = seconds % 60;
|
|
|
|
if (hrs > 0) {
|
|
return `${hrs.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
|
|
}
|
|
return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
|
|
}
|
|
},
|
|
watch: {
|
|
initialTime(newVal) {
|
|
if (!this.isRunning) {
|
|
this.time = newVal;
|
|
}
|
|
}
|
|
},
|
|
beforeDestroy() {
|
|
clearInterval(this.intervalId);
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
/* Add your own styles here */
|
|
</style>
|