<template>
<button class="button-confetti" @click="clickHandler">
{{label}}
</button>
</template>
<script>
module.exports = {
created() {
console.log("button-confetti: created");
this.loadedConfetti = this.loadConfetti();
},
mounted() {
console.log("button-confetti: mounted");
},
watch: {
label() {
console.log("button-confetti: label changed");
}
},
methods: {
clickHandler() {
if(this.click) {
this.click({extra: 'foo'})
}
this.showConfetti();
},
async showConfetti() {
// make sure it is loaded by waiting on the Promise
await this.loadedConfetti;
await new Promise((resolve) => setTimeout(resolve, 1000))
confetti();
},
/* begin boilerplate */
async loadConfetti() {
let confettiUrl = "https://cdn.jsdelivr.net/npm/canvas-confetti@1.9.3/dist/confetti.browser.min.js";
require.config({
map: {
'*': {
'confetti': confettiUrl,
}
}
})
await new Promise((resolve, reject) => {
require(['confetti'], (confettiModule) => {
resolve(confettiModule);
}, reject)
});
},
/* end boilerplate */
},
}
</script>
<style id="button-confetti">
.button-confetti {
background-color: lightblue;
margin: 10px;
padding: 4px;
border: 1px solid black;
}
</style>