frontend: add countdown on home page
Signed-off-by: Nicolas Froger <nicolas@kektus.xyz>
This commit is contained in:
parent
ba4bbe1a19
commit
1edc1690db
2 changed files with 54 additions and 0 deletions
37
summer2024-frontend/src/components/Countdown.vue
Normal file
37
summer2024-frontend/src/components/Countdown.vue
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
<script setup>
|
||||||
|
const props = defineProps(['date', 'class'])
|
||||||
|
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
const countdownDisplay = ref('')
|
||||||
|
const countdownDate = props.date.getTime()
|
||||||
|
|
||||||
|
const countdownInterval = setInterval(() => {
|
||||||
|
const now = new Date().getTime()
|
||||||
|
const distance = countdownDate - now
|
||||||
|
if (distance < 0) {
|
||||||
|
countdownDisplay.value = 'c\'est parti !'
|
||||||
|
clearInterval(countdownInterval)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const days = Math.floor(distance / (1000 * 60 * 60 * 24))
|
||||||
|
const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
|
||||||
|
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))
|
||||||
|
const seconds = Math.floor((distance % (1000 * 60)) / 1000)
|
||||||
|
|
||||||
|
countdownDisplay.value = `${days} jour` + (days > 1 ? 's' : '') +
|
||||||
|
` ${hours} heure` + (hours > 1 ? 's' : '') +
|
||||||
|
` ${minutes} minute` + (minutes > 1 ? 's' : '') +
|
||||||
|
` ${seconds} seconde` + (seconds > 1 ? 's' : '')
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<p :class="props.class">{{ countdownDisplay }}</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -1,5 +1,18 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { usePostsStore } from '@/stores/posts.js'
|
import { usePostsStore } from '@/stores/posts.js'
|
||||||
|
import Countdown from '@/components/Countdown.vue'
|
||||||
|
import { onMounted, ref } from 'vue'
|
||||||
|
|
||||||
|
const enableCountdown = ref(false)
|
||||||
|
const countdownDate = ref(new Date('2024-07-28 07:00:00'))
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
const now = new Date().getTime()
|
||||||
|
const distance = countdownDate.value.getTime() - now
|
||||||
|
if (distance > 0) {
|
||||||
|
enableCountdown.value = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const postsStore = usePostsStore()
|
const postsStore = usePostsStore()
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -16,6 +29,10 @@ const postsStore = usePostsStore()
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<p class="mx-4">le contenu n'est pas encore disponible, revenez plus tard</p>
|
<p class="mx-4">le contenu n'est pas encore disponible, revenez plus tard</p>
|
||||||
|
<div class="mt-16 mx-4" v-if="enableCountdown">
|
||||||
|
<p>ça commence dans...</p>
|
||||||
|
<Countdown class="text-3xl font-extrabold" :date="countdownDate" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue