ํฐ์คํ ๋ฆฌ ๋ทฐ
์ค๋ฅ
const img = new Image();
img.src = images[0]; //image src๋ฅผ ๋ด์ ๋ฐฐ์ด
console.log(img.width);
์ด๋ฏธ์ง์ ์ฌ์ด์ฆ๋ฅผ ์ฐธ์กฐํด์ผ ๋์ ๋ค์๊ณผ ๊ฐ์ด Image ๊ฐ์ฒด๋ฅผ ํตํด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ํด๋น ์ธ์คํด์ค์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด ์ค ๋ค, ์ด๋ฏธ์ง์
๊ฐ๋ก ์ฌ์ด์ฆ๋ฅผ ์ฐธ์กฐํ๋ ค๊ณ ํ์ง๋ง ์๋ ์ด๋ฏธ์ง ์ฌ์ด์ฆ๊ฐ ์๋ 0 ๊ฐ์ด ๊ณ์ ๋์ค๋ ๋ณ์๊ฐ ๋ฐ์ํ์๋ค.
๊ฒ์ํด์ ํ์ธํด ๋ณด๋ ๋ชจ๋ ๋ฆฌ์์ค์ ๊ฐ์ด ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ๋น๋๊ธฐ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค๋ ์ฌ์ค์ ํ์ธํ์๋ค.
์ฆ, ์ด๋ฏธ์ง์ ๋๋น๋ฅผ ์์ฒญํ ๋, img.width์ ๊ฐ์ ์์ง ๊ฐ์ ๋ถ๋ฌ์ค์ง ์์ ์ํ์ด๊ธฐ ๋๋ฌธ์(๋น๋๊ธฐ ์์ ์ ๋ค๋ฅธ ์์ ์ด ๋๊ธฐ์ ์ผ๋ก ๋ชจ๋ ์คํ์ด ๋ง์น ๋ค์ ์คํ) ๊ฐ์ด 0์ด ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
const img = new Image();
img.src = images[0];
img.onload = e => console.log(img.width);
์์ ์ฌ์ค์ ํ์ธํ๊ธฐ ์ํด load ์ด๋ฒคํธ๋ฅผ ์ด๋ฏธ์ง ์ธ์คํด์ค์ ๋ฑ๋กํด์ฃผ๊ณ ๊ทธ ์ฝ๋ฐฑ ํจ์ ๋ด์์ ์ด๋ฏธ์ง์ ๊ฐ๋ก ๋๋น๋ฅผ ์ถ๋ ฅํด ๋ดค๋๋
์ด๋ฏธ์ง์ ์ ๋๋ก ๋ ๋๋น ๊ฐ์ด ๋์๋ค.
ํด๋ก์ ๋ก ์ธํด ์์ ํจ์ ๋ด์์ ์ ์ธ๋ img ๋ณ์๋ ์ฝ๋ฐฑ ํจ์ ๋ด์์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ์ง๋ง ํด๋น ์ฝ๋ฐฑ ํจ์ ๋ด์์ ์์ ๋ณ์์ ์ด๋ฏธ์ง์ ๋๋น ๊ฐ์ ํ ๋นํ๋ค๊ณ ํ๋๋ผ๋ ์์ ํจ์ ๋ด์์๋ ๊ทธ ๋ณ์ ๋ด์ ๊ฐ์ ์ฌ์ฉํ์ง ๋ชปํ๋ค.
(ํด๋น ๊ฐ์ด ๋ค์ด๊ฐ ์์ ์ ํด๋น ๋ณ์๊ฐ ์๋ ์์ ํจ์๊ฐ ์ข ๋ฃ๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค)
load event: css ๋ฐ image ๋ฑ๊ณผ ๊ฐ์ ๋ฆฌ์์ค ํ์ผ๋ค์ด ๋ชจ๋ ์๋ฃ๋ ๋ค์ ํธ์ถ ๋ฐ ์คํ ๊ฐ๋ฅํ๋ค.
DomContentLoaded์ onLoad ์ด๋ฒคํธ ํธ๋ค๋ฌ
Promise๋ async/await๋ฅผ ํตํด ๋น๋๊ธฐ ํ์ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ๋ฐฉ์๋ง๊ณ ๋ DomcontentLoaded์ onLoad ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ด์ฉํ์ฌ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
์ฐ์ ๋ค์๊ณผ ๊ฐ์ด img ํ๊ทธ๊ฐ ํฌํจ๋์ด ์๋ ๋งํฌ์ ์ innerHTML ์์์ ๋์ ์ผ๋ก ์์ฑํด ์ค๋ค.์ด๋ DOMContentLoaded ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฝ๋ฐฑ ํจ์ ๋ด์์ ์์ ๊ฐ์ ์ฐ์ฐ์ ์ํ์ค๋ค๋ฉด ์ฐ์ ์ ์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์ ํด ์ค imgํ๊ทธ๋ฅผ ์์ฑํ ์ ์๋ค.
DOMContentLoaded: HTML ํ์ฑ๋ง ์๋ฃ๋๋ฉด ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถ ๋ฐ ์คํ ๊ฐ๋ฅํ๋ค.
document.addEventListener('DOMContentLoaded', () => {
$container.innerHTML = `
<div class="carousel-slides">
${[images[images.length - 1], ...images, images[0]].map(url => `<img src="${url}" />`).join('')}
</div>
<button class="carousel-control prev">«</button>
<button class="carousel-control next">»</button>
`;
$carouselSlides = document.querySelector('.carousel-slides');
});
๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ํด๋น ์ค์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ load ์ด๋ฒคํธ ์ฝ๋ฐฑ ํจ์ ๋ด์์ ์ฐ์ฐ์ ์คํํด ์ค๋ค. ๊ฒฝ๋ก๊ฐ ์ ํด์ง img ํ๊ทธ๋ DomContentLoaded ์ฝ๋ฐฑ ํจ์ ๋ด์์ ๋์ ์ผ๋ก ์ด๋ฏธ ์์ฑํด ๋ ์ํ์ด๊ธฐ ๋๋ฌธ์ ํ๊ทธ ์ ํ์๋ฅผ ํตํด์๊ฐ์ ธ์ฌ ์ ์๋ค.
window.onload = () => {
const { offsetWidth } = $carouselSlides.querySelector('img');
$container.style.width = `${offsetWidth}px`;
$container.style.opacity = 1;
move(++currentSlide);
};
https://choi95.tistory.com/3?category=857834
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
insertAdjacentElement๋ก ์์ ์ถ๊ฐ (0) | 2021.07.13 |
---|---|
์บ๋ฌ์ (Carousel) (0) | 2021.07.10 |
JS ์์์ HTML ๋์ ์์ฑ (0) | 2021.07.07 |
createDocumentFragment()๋ฅผ ํตํ ์์ ์์ฑ (0) | 2021.07.05 |
stopwatch (0) | 2021.07.05 |