ํด๋ฆฐ ์ฝ๋ ์ฝ์ผ๋ฉฐ ๋ผ๋ง์๋ ๋ด์ฉ ์ค 3๊ฐ์ง ์ง๋ฆฌ ๋ฅผ ๊ณ ๋ฅด๊ณ , ์ง๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์ ์ด 3๊ฐ์ง๋ฅผ ๋ง๋ค๊ธฐ.
์ง๋ฆฌ 1. try/catch ๋ธ๋ก์ ๋ณ๋ ํจ์๋ก ๋ฝ์๋ด๋ ํธ์ด ์ข๋ค. (p.58)
๋ฌด์์ ๊ณ ์ณค๋๊ฐ?
๐ Before
const saveAsImageHandler = async () => {
const target = document.getElementById('content');
if (!target) return alert('๊ฒฐ๊ณผ ์ ์ฅ์ ์คํจํ์ต๋๋ค.');
alert(
'์๋ก์ด ์ฐฝ์ด ์ด๋ฆฌ๋ฉด\nPC์์๋ ์ฐํด๋ฆญ -> ์ด๋ฏธ์ง ์ ์ฅํ๊ธฐ\n๋ชจ๋ฐ์ผ์ ์ด๋ฏธ์ง๋ฅผ ๊พน ๋๋ฌ์ฃผ์ธ์!\n*์๋ก์ด ์ฐฝ์ด ์ ์ด๋ฆฐ๋ค๋ฉด ํ์
์ ํด์ ํด์ฃผ์ธ์*'
);
try {
const canvas = await html2canvas(target);
canvas.toBlob((blob) => {
if (blob) {
const uri = URL.createObjectURL(blob);
window.open(uri);
}
});
} catch (error) {
alert('๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.');
}
};
ํ์ด์ง์ ํด๋น ์์ญ์ ์บก์ฒํด์ ์ด๋ฏธ์ง๋ก ์ ์ฅํ๊ฒ ํ๋ ๋ถ๋ถ์ด๋ค.
๋ณด๋ค์ํผ ํ ํจ์ ์์์ ์ ์ ๋์๊ณผ ์ค๋ฅ ์ฒ๋ฆฌ ๋์์ ๋ค์์ผ๋ฉด์ ์ฌ๋ฌ ๋์์ ์ํํ๊ณ ์๋ค.
์ด๋ฌํ ํจ์๋ ์ฝ๋ ๊ตฌ์กฐ์ ํผ๋์ ์ผ์ผํฌ ์ ์๋ค.
์ด๋ป๊ฒ ๊ณ ์ณค๋๊ฐ?
๐ After
const saveImage = async () => {
const target = document.getElementById('content');
if (target) {
alert(
'์๋ก์ด ์ฐฝ์ด ์ด๋ฆฌ๋ฉด\nPC์์๋ ์ฐํด๋ฆญ -> ์ด๋ฏธ์ง ์ ์ฅํ๊ธฐ\n๋ชจ๋ฐ์ผ์ ์ด๋ฏธ์ง๋ฅผ ๊พน ๋๋ฌ์ฃผ์ธ์!\n*์๋ก์ด ์ฐฝ์ด ์ ์ด๋ฆฐ๋ค๋ฉด ํ์
์ ํด์ ํด์ฃผ์ธ์*'
);
const canvas = await html2canvas(target);
canvas.toBlob((blob) => {
if (blob) {
const uri = URL.createObjectURL(blob);
window.open(uri);
}
});
}
};
const saveImageError = () => {
return alert('๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.');
};
const onClick = () => {
try {
saveImage();
} catch (error) {
saveImageError();
}
};
๋ฒํผ์ ํด๋ฆญ ํ์ ๋ ๋์ํ๋ ํจ์ onClick ํจ์์๋ค๊ฐ try/catch๋ฌธ์ ์์ฑํ๋ค.
try/catch๋ฌธ ์์๋ ์ ์ ๋์์ ์ฒ๋ฆฌํ๋ ํจ์ saveImage๋ฅผ ์์ฑํด์ ํธ์ถํ๊ฒ ํ๊ณ ,
์ค๋ฅ ๋์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ํจ์ saveImageError ํจ์๋ฅผ ์์ฑํด์ ํธ์ถํ๊ฒ ํ๋ค.
์ด๋ ๊ฒ ๋ณ๋ ํจ์๋ก ๋ฝ์๋์ผ๋ก์จ ๊ตฌ์กฐ๊ฐ ํ๋์ ๋ค์ด์จ๋ค.
์ง๋ฆฌ 2. ํจ์๋ 'ํ ๊ฐ์ง' ์์ ๋ง ํด์ผ ํ๋ค.(p.59)
๋ฌด์์ ๊ณ ์ณค๋๊ฐ?
๐ Before
function increaseAudioTimer() {
time++;
let mins = Math.floor((time % 3600) / 60);
let secs = (time % 3600) % 60;
audioTime.innerHTML = `${mins < 10 ? `0${mins}` : mins}:${secs < 10 ? `0${secs}` : secs}`;
}
function resetAudioTimer() {
clearInterval(timerInterval);
time = START_TIME;
audioTime.innerHTML = '00:00';
}
์ค๋์ค์ ์๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ์ด๊ธฐํ ํ๋ ์ด๋ ๊ฐ์ ํจ์๊ฐ ์๋ค.
๊ฐ ํจ์๋ค์์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ค๋ณต๋๋ ๊ธฐ๋ฅ์ ํ๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
increaseAudioTimer ํจ์ ์์์๋ ์๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ๋ถ, ์ด๋ฅผ ๊ณ์ฐํ๋ ์๊ณผ ์๊ฐ์ ํ์ํ๋ ๋ถ๋ถ์ด ์๋ค.
resetAudioTimer ํจ์๋ ๋ณด๋ฉด ์์์ ์๊ฐ์ ํ์ํ๋ ์ค๋ณต๋๋ ๋ถ๋ถ์ ๋ณผ ์ ์๋ค.
์ด๋ป๊ฒ ๊ณ ์ณค๋๊ฐ?
๐ After
function resetAudioTimer() {
clearInterval(timerInterval);
time = START_TIME;
displayAudioTime(0, 0);
}
function displayAudioTime(mins, secs) {
audioTime.innerHTML = `${mins < 10 ? `0${mins}` : mins}:${
secs < 10 ? `0${secs}` : secs
}`;
}
function increaseAudioTimer() {
time++;
const { mins, secs } = getPlayTime();
displayAudioTime(mins, secs);
}
function getPlayTime() {
const mins = Math.floor((time % 3600) / 60);
const secs = (time % 3600) % 60;
return { mins, secs };
}
- ์๊ฐ์ ๊ณ์ฐํ๋ ๊ธฐ๋ฅ์ getPlayTime ํจ์๋ก ๋ถ๋ฆฌํ๋ค.
- ์ค๋ณต๋๋ ์๊ฐ์ ํ์ํ๋ ๊ธฐ๋ฅ์ displayAudioTime ํจ์๋ก ๋ถ๋ฆฌํ๋ค.
๊ฐ๊ฐ ํจ์๋ก ๋ถ๋ฆฌํจ์ผ๋ก์ ์ด๋ค ํจ์๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ๋ช ํํ๊ฒ ์ ์ ์๊ณ ๋์ค์ ๋ฆฌํฉํ ๋ง์ ํ๊ฒ ๋์ด๋ ํด๋น ํจ์๋ง ์์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ด์ ์ด ์๊ฒผ๋ค.
์ง๋ฆฌ 3. ์ฝ๋๋ง์ด ์ ํํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์ ์ผํ ์ถ์ฒ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ฆฌ๋ ์ฃผ์์ ๊ฐ๋ฅํ ์ค์ด๋๋ก ๊พธ์คํ ๋ ธ๋ ฅํด์ผ ํ๋ค. (p.69)
๋ฌด์์ ๊ณ ์ณค๋๊ฐ?
๐ Before
// ๋ฌธ์๋ฅผ ํฌํจํ ์ซ์๋ก๋ ๋ฌธ์๋ค์ ์ ์๋ก ๋ฐ๊พธ๋ ํจ์
function stringNumberToInt(stringNumber) {
return parseInt(stringNumber.replace(/,/g, ''));
}
// ์ฒ ์๋ฆฌ ์ฝค๋ง ํจ์
function numberFormat(inputNumber) {
return inputNumber.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
ํจ์๋ฅผ ์ค๋ช ํ๋ ์ฃผ์์ด ์ถ๊ฐ ๋์ด์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฃผ์์ ์ต๋ํ ์ค์ด๊ณ ํจ์ ์์ฒด๋ก๋ง ์ค๋ช ์ด ๊ฐ๋ฅํ๊ฒ ๋ ๋ณ๊ฒฝ์ ํด์ฃผ์ด์ผ ํ๋ค.
์ด๋ป๊ฒ ๊ณ ์ณค๋๊ฐ?
๐ After
function stringNumberToInt(stringNumber) {
return parseInt(stringNumber.replace(/,/g, ''));
}
function addCommatoThousandDigits(inputNumber) {
return inputNumber.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
์ฒซ๋ฒ์งธ ํจ์ stringNumberToInt๋ ํจ์๋ช ๋ง ๋ด๋ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋ ํจ์์ธ์ง ๋ช ํํ๊ฒ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ฃผ์์ ์ ๊ฑฐํด์คฌ๋ค.
๋ ๋ฒ์งธ ํจ์ addComaToThousandDigits ํจ์๋ ์ฒ ์๋ฆฌ ์ซ์์ ์ฝค๋ง๋ฅผ ์ถ๊ฐํด ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ ํจ์๋ค.
๋ณ๊ฒฝ ์ ์๋ ํจ์ numberFormat์ด๋ผ๋ ๋ชจํธํ ํจ์๋ช ์ด์๊ธฐ ๋๋ฌธ์ ์ฃผ์์ด ํ์ํ๊ฒ ์ง๋ง,
๋ณ๊ฒฝ ํ์๋ ์ฃผ์์ด ์์ด๋ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ๋ฐ๋ก ์ ์ ์๊ฒ๋์๋ค.