diff --git a/src/components/Fireworks.vue b/src/components/Fireworks.vue index fb1254cc..93b61f44 100644 --- a/src/components/Fireworks.vue +++ b/src/components/Fireworks.vue @@ -22,13 +22,9 @@ onMounted(() => { let bigBooms = []; let lastTime; - Array.prototype.foreach = function (callback) { - for (let i = 0; i < this.length; i++) { - if (this[i] !== null) callback.apply(this[i], [i]); - } - }; - let raf = window.requestAnimationFrame + let count = 0 + let isBreak = false function initAnimate() { lastTime = new Date(); @@ -36,7 +32,6 @@ onMounted(() => { } initAnimate() - let count = 0 function animate() { ctx.save(); @@ -46,17 +41,26 @@ onMounted(() => { ctx.restore(); let newTime = new Date(); - if (newTime - lastTime > 200 + (window.innerHeight - 767) / 2) { - let boomArea = { - x: getRandom(canvas.width / 5, (canvas.width * 4) / 5), - y: getRandom(50, 200) - } + if (newTime - lastTime > 200 + (window.innerHeight - 767) / 2 && count < 11) { + let boomArea + let startX if (count % 2 === 0) { - + startX = getRandom(0, canvas.width * 0.1); + // startX = getRandom(500, 700); + boomArea = { + x: getRandom(canvas.width * 0.1, canvas.width * 0.3), + y: getRandom(50, 200) + } + } else { + startX = getRandom(canvas.width * 0.9, canvas.width); + boomArea = { + x: getRandom(canvas.width * 0.7, canvas.width * 0.9), + y: getRandom(50, 200) + } } let bigBoom = new Boom( - getRandom(canvas.width / 3, (canvas.width * 2) / 3), + startX, 2, "#FFF", boomArea @@ -77,10 +81,22 @@ onMounted(() => { bigBooms.splice(bigBooms.indexOf(itemI), 1); } }); + if (bigBooms.length === 0) { + setTimeout(() => { + isBreak = true + }, 1000) + } } }); - raf(animate); + if (!isBreak) { + raf(animate); + } else { + // ctx.globalCompositeOperation = 'source-over' + // ctx.globalAlpha = 0; + // ctx.fillStyle = 'transparent'; + // ctx.fillRect(0, 0, canvas.width, canvas.height); + } } class Boom { @@ -99,7 +115,7 @@ onMounted(() => { this.x = x; this.y = canvas.height + r; this.r = r; - console.log(this.x, this.y, this.r, boomArea) + // console.log(this.x, this.y, this.r, boomArea) this.color = color; this.shape = shape || false; this.boomArea = boomArea; @@ -115,7 +131,7 @@ onMounted(() => { dy = this.boomArea.y - this.y; this.x = this.x + dx * 0.01; this.y = this.y + dy * 0.01; - console.log(this.x, this.y, dx, this.ba) + // console.log(this.x, this.y, dx, this.ba) if (Math.abs(dx) <= this.ba && Math.abs(dy) <= this.ba) { this._boom(); @@ -242,6 +258,7 @@ canvas { top: 0; width: 100vw; height: 100vh; + background: transparent; pointer-events: none; } diff --git a/src/components/Statistics.vue b/src/components/Statistics.vue index 56594866..5994fa19 100644 --- a/src/components/Statistics.vue +++ b/src/components/Statistics.vue @@ -76,7 +76,7 @@ const store = useBaseStore() - +