123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- /*
- * @Author: wangjiacheng
- * @Date: 2021-10-15 10:58:28
- * @LastEditors: wangjiacheng
- * @LastEditTime: 2021-10-15 14:17:38
- * @Description:
- */
- export default {
- methods: {
- /* eslint-disable */
- fireworkss() {
- // window.addEventListener("resize", resizeCanvas, false);
- // window.addEventListener("DOMContentLoaded", onLoad, false);
- onLoad()
- window.requestAnimationFrame =
- window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- window.msRequestAnimationFrame ||
- function (callback) {
- window.setTimeout(callback, 1000 / 60);
- };
- var canvas, ctx, w, h, particles = [], probability = 0.04,
- xPoint, yPoint;
- function onLoad() {
- canvas = document.getElementById("canvas");
- ctx = canvas.getContext("2d");
- resizeCanvas();
- window.requestAnimationFrame(updateWorld);
- }
- function resizeCanvas() {
- if (!!canvas) {
- w = canvas.width = window.innerWidth;
- h = canvas.height = window.innerHeight;
- }
- }
- function updateWorld() {
- update();
- paint();
- window.requestAnimationFrame(updateWorld);
- }
- function update() {
- if (particles.length < 500 && Math.random() < probability) {
- createFirework();
- }
- var alive = [];
- for (var i = 0; i < particles.length; i++) {
- if (particles[i].move()) {
- alive.push(particles[i]);
- }
- }
- particles = alive;
- }
- function paint() {
- ctx.globalCompositeOperation = 'source-over';
- ctx.fillStyle = "rgba(0,0,0,0.2)";
- ctx.fillRect(0, 0, w, h);
- ctx.globalCompositeOperation = 'lighter';
- for (var i = 0; i < particles.length; i++) {
- particles[i].draw(ctx);
- }
- }
- function createFirework() {
- xPoint = Math.random() * (w - 200) + 100;
- yPoint = Math.random() * (h - 200) + 100;
- var nFire = Math.random() * 50 + 100;
- var c = "rgb(" + (~~(Math.random() * 200 + 55)) + ","
- + (~~(Math.random() * 200 + 55)) + "," + (~~(Math.random() * 200 + 55)) + ")";
- for (var i = 0; i < nFire; i++) {
- var particle = new Particle();
- particle.color = c;
- var vy = Math.sqrt(25 - particle.vx * particle.vx);
- if (Math.abs(particle.vy) > vy) {
- particle.vy = particle.vy > 0 ? vy : -vy;
- }
- particles.push(particle);
- }
- }
- function Particle() {
- this.w = this.h = Math.random() * 4 + 1;
- this.x = xPoint - this.w / 2;
- this.y = yPoint - this.h / 2;
- this.vx = (Math.random() - 0.5) * 10;
- this.vy = (Math.random() - 0.5) * 10;
- this.alpha = Math.random() * .5 + .5;
- this.color;
- }
- Particle.prototype = {
- gravity: 0.05,
- move: function () {
- this.x += this.vx;
- this.vy += this.gravity;
- this.y += this.vy;
- this.alpha -= 0.01;
- if (this.x <= -this.w || this.x >= screen.width ||
- this.y >= screen.height ||
- this.alpha <= 0) {
- return false;
- }
- return true;
- },
- draw: function (c) {
- c.save();
- c.beginPath();
- c.translate(this.x + this.w / 2, this.y + this.h / 2);
- c.arc(0, 0, this.w, 0, Math.PI * 2);
- c.fillStyle = this.color;
- c.globalAlpha = this.alpha;
- c.closePath();
- c.fill();
- c.restore();
- }
- }
- },
- fireworks() {
- var _createClass = function () {
- function defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
- return function (Constructor, protoProps, staticProps) {
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
- if (staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- }();
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
- var Progress = function () {
- function Progress() {
- var param = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
- _classCallCheck(this, Progress);
- this.timestamp = null;
- this.duration = param.duration || Progress.CONST.DURATION;
- this.progress = 0;
- this.delta = 0;
- this.progress = 0;
- this.isLoop = !!param.isLoop;
- this.reset();
- }
- Progress.prototype.reset = function reset() {
- this.timestamp = null;
- };
- Progress.prototype.start = function start(now) {
- this.timestamp = now;
- };
- Progress.prototype.tick = function tick(now) {
- if (this.timestamp) {
- this.delta = now - this.timestamp;
- this.progress = Math.min(this.delta / this.duration, 1);
- if (this.progress >= 1 && this.isLoop) {
- this.start(now);
- }
- return this.progress;
- } else {
- return 0;
- }
- };
- _createClass(Progress, null, [{
- key: "CONST",
- get: function get() {
- return {
- DURATION: 1000
- };
- }
- }]);
- return Progress;
- }();
- var Confetti = function () {
- function Confetti(param) {
- _classCallCheck(this, Confetti);
- this.parent = param.elm || document.body;
- this.canvas = document.createElement("canvas");
- this.ctx = this.canvas.getContext("2d");
- this.width = param.width || this.parent.offsetWidth;
- this.height = param.height || this.parent.offsetHeight;
- this.length = param.length || Confetti.CONST.PAPER_LENGTH;
- this.yRange = param.yRange || this.height * 2;
- this.progress = new Progress({
- duration: param.duration,
- isLoop: true
- });
- this.rotationRange = typeof param.rotationLength === "number" ? param.rotationRange : 10;
- this.speedRange = typeof param.speedRange === "number" ? param.speedRange : 10;
- this.sprites = [];
- this.canvas.style.cssText = ["display: block", "position: absolute", "top: 0", "left: 0", "pointer-events: none"].join(";");
- this.render = this.render.bind(this);
- this.build();
- this.parent.append(this.canvas);
- this.progress.start(performance.now());
- requestAnimationFrame(this.render);
- }
- Confetti.prototype.build = function build() {
- for (var i = 0; i < this.length; ++i) {
- var canvas = document.createElement("canvas"),
- ctx = canvas.getContext("2d");
- canvas.width = Confetti.CONST.SPRITE_WIDTH;
- canvas.height = Confetti.CONST.SPRITE_HEIGHT;
- canvas.position = {
- initX: Math.random() * this.width,
- initY: -canvas.height - Math.random() * this.yRange
- };
- canvas.rotation = this.rotationRange / 2 - Math.random() * this.rotationRange;
- canvas.speed = this.speedRange / 2 + Math.random() * (this.speedRange / 2);
- ctx.save();
- ctx.fillStyle = Confetti.CONST.COLORS[Math.random() * Confetti.CONST.COLORS.length | 0];
- ctx.fillRect(0, 0, canvas.width, canvas.height);
- ctx.restore();
- this.sprites.push(canvas);
- }
- };
- Confetti.prototype.render = function render(now) {
- var progress = this.progress.tick(now);
- this.canvas.width = this.width;
- this.canvas.height = this.height;
- for (var i = 0; i < this.length; ++i) {
- this.ctx.save();
- this.ctx.translate(this.sprites[i].position.initX + this.sprites[i].rotation * Confetti.CONST.ROTATION_RATE * progress, this.sprites[i].position.initY + progress * (this.height + this.yRange));
- this.ctx.rotate(this.sprites[i].rotation);
- this.ctx.drawImage(this.sprites[i], -Confetti.CONST.SPRITE_WIDTH * Math.abs(Math.sin(progress * Math.PI * 2 * this.sprites[i].speed)) / 2, -Confetti.CONST.SPRITE_HEIGHT / 2, Confetti.CONST.SPRITE_WIDTH * Math.abs(Math.sin(progress * Math.PI * 2 * this.sprites[i].speed)), Confetti.CONST.SPRITE_HEIGHT);
- this.ctx.restore();
- }
- requestAnimationFrame(this.render);
- };
- _createClass(Confetti, null, [{
- key: "CONST",
- get: function get() {
- return {
- SPRITE_WIDTH: 9,
- SPRITE_HEIGHT: 16,
- PAPER_LENGTH: 100,
- DURATION: 8000,
- ROTATION_RATE: 50,
- COLORS: ["#EF5350", "#EC407A", "#AB47BC", "#7E57C2", "#5C6BC0", "#42A5F5", "#29B6F6", "#26C6DA", "#26A69A", "#66BB6A", "#9CCC65", "#D4E157", "#FFEE58", "#FFCA28", "#FFA726", "#FF7043", "#8D6E63", "#BDBDBD", "#78909C"]
- };
- }
- }]);
- return Confetti;
- }();
- (function () {
- var DURATION = 6000,
- LENGTH = 220;
- new Confetti({
- width: window.innerWidth,
- height: window.innerHeight,
- length: LENGTH,
- duration: DURATION
- });
- setTimeout(function () {
- new Confetti({
- width: window.innerWidth,
- height: window.innerHeight,
- length: LENGTH,
- duration: DURATION
- });
- }, DURATION / 2);
- })();
- }
- }
- }
|