vanilla JS ์ปดํฌ๋ํธํ ์น๊ณผ WEBPACK ํ๊ฒฝ์์ ์ฝํํฐ ์ปดํฌ๋ํธ ํจ๊ณผ๋ฅผ ์จ๋ณด์!!
๋จผ์ ์ฝํํฐ ํจ๊ณผ๊ฐ Promise ๊ธฐ๋ฅ์ ํ์๋ก ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฝํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ์์ผ ํฉ๋๋ค.
$ npm install promise
$ npm install --save canvas-confetti
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ์์ผ๋๊น ๋น๋์์ ์ฌ์ฉํ๋ค๊ณ ์นํฉ์น๊ตฌํํ ๋ ์๋ ค์ค์ผํฉ๋๋ค. ๋ฐ๋ผ์ webpack.config.js ํ์ผ์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
//webpack.config.js ํ์ผ ์๋จ์
๋๋ค!!
const path = require('path');
const confetti = require('canvas-confetti');
const MyPromise = require('some-promise-library');
//webpack.config.js ํ์ผ ํ๋จ์ ์ด์ฉํ ์ ์๋๋ก ์ ์ธํด๋์ต๋๋ค.
...
// loadash
new LodashModuleReplacementPlugin(),
],
};
...
// ์ ์ผ ํ๋จ
confetti.Promise = MyPromise;
import { Component } from '../core';
import confetti from 'canvas-confetti';
export default class Confetti extends Component {
render() {
this.el.innerHTML = /*html*/ `
<canvas id="my-canvas"></canvas>
`;
// ํด๋น divํ๊ทธ ์จ๊ธฐ๊ธฐ
this.el.style.position = 'fixed';
this.el.sylte.height = '0px';
// ์บ๋ฒ์ค ์ง์ ํ๊ธฐ
const myCanvas = document.querySelector('canvas');
// ์ฝํํฐ ์บ๋ฒ์ค์ ์ง์ ํ๊ธฐ
const myConfetti = confetti.create(myCanvas, {
resize: true,
useWorker: true,
});
// ์ฝํํฐ ํจ๊ณผ ๋ฐ์์ํค๊ธฐ
myConfetti({
particleCount: 100,
spread: 160,
zIndex: 5,
origin: {
y: 0.6,
},
});
}
}
์ฝํํฐ ํจ๊ณผ๋ฅผ ์คํํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ญ๋๋ค.
innerHTML์ ํ์ฉํ์ฌ canvas
ํ๊ทธ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
์ดํ ํด๋น ์ปดํฌ๋ํธ์ position ๊ฐ์ fixed๋ก ๋์ด์ canvas๋ฅผ ๋ด๊ณ ์๋ div tag๋ฅผ ์จ๊น๋๋ค (๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ค๋ฉด ์๋ ค์ฃผ์ธ์ ๐ฅ)
์ดํ canvas์์์ ์ฝํํฐ๋ฅผ ๋ฐฐ์ ํด์ค๋๋ค.
์ฒซ๋ฒ์งธ parameter์๋ canvas ์์๋ฅผ ๋ฃ์ด์ค๋๋ค.
๋๋ฒ์งธ parameter์๋ option ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ค๋๋ค.
resize : viewport์ ๊ธธ์ด๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์บ๋ฒ์ค์ ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก resizeํด์ค๋๋ค.
useWorker : ํด๋น ์ฝํํฐ ํจ๊ณผ๊ฐ ํญ์ ๋ฉ์ธ ์ฐ๋ ๋์์ ์คํ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์กฐ๊ธ ์ฝ๊ฒ ์ดํดํ๋ฉด ์น์์ ํ์ด์ง๋ฅผ ์ด๋ป๊ฒ ๋ณ๊ฒฝํ๋์ง๊ฐ์ ๊ทธ๋ฅ ํจ๊ณผ๊ฐ ์คํ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฆ ํ์ด์ง์ ๋์์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ฐฐ๊ฒฝํ๋ฉด์ฒ๋ผ ์คํ๋๋ค๋ ์๋ฏธ์ ๋๋ค.
์ด๋ ๊ฒ ์ต์ ์ ์ง์ ํ ์ฝํํฐํจ๊ณผ๋ฅผ ์ด์ ๋ถ๋ฌ ์ฌ ์ฐจ๋ก์ ๋๋ค.
์ฝํํฐํจ๊ณผ์ ์ฌ๋ฌ๊ฐ์ง ์์ฑ๋ค์ ๋ฃ์ด์ค๋๋ค.
๋ค์ํ ํจ๊ณผ๋ค ๋ณด๊ธฐ
// ์ํ๋ ์ปดํฌ๋ํธ ์๋จ์์ ์ฝํํฐ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
import Confetti from '../components/Confetti.js';
// ์ดํ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
this.el.append(new Confetti().el);
์ด๋ ๊ฒ ํ๋ฉด ๊ตฌํ์ด ์์ฑ๋ฉ๋๋ค!!
addEventListener์ ํ์ฉํด์ append๋ก ๋ถ๋ฌ์์ ํจ๊ณผ๋ฅผ ์ค ์ ๋ ์์ต๋๋ค!! ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด์ ๊ฐ๋จํ ์ฝํํฐํจ๊ณผ๋ฅผ ๊ตฌํํด๋ณด์ธ์!!