2023. 2. 14. 00:49ใportfolio issue
youtube api๋ฅผ ์ฐ๋ํ์ฌ ๊ฐค๋ฌ๋ฆฌ ํ์ด์ง๋ฅผ ๋ง๋๋ ์ค์
์ด thumbnail์ ํด๋ฆญํ๋ฉด popup์ ์์์ด ๋จ๋๋ก ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋์ ์ผ๋ก pop ์ฐฝ์ ๋ง๋ค์ด์ฃผ๋ คํ๋ค
<div class="sectionCont">
<div id="youtube"></div>
</div>
html์ ์ด๊ฒ ๋์ธ๋ฐ ์ด๊ฒ ๋์ธ ์ด์ ๋ list์ ํด๋นํ๋ ๋งํฌ์ ์ javascript์์ ๋ง๋ค์ด์ฃผ์๊ธฐ ๋๋ฌธ...!
result += `
<article class='youtubeCont'>
<a href="${el.snippet.resourceId.videoId}" class="pic">
<img src="${el.snippet.thumbnails.high.url}">
</a>
<div class="con">
<h2>${title}</h2>
<span>${date}</span>
</div>
</article>
`;
์ #youtube์์ ์ด๋ ๊ฒ ๋์ ์ผ๋ก ํ์ด์ง๋ฅผ ๊ทธ๋ ค์ฃผ์์..!
const youtubeList = document.querySelector("#youtube");
//์ด๋ฒคํธ ์์ ํด๋ฆญ์ pop ๋ชจ๋ฌ์์ฑ
youtubeList.addEventListener("click", (e) => {
e.preventDefault();
if (!e.target.closest("a")) return;
const vidId = e.target.closest("a").getAttribute("href");
//๋์ ์ผ๋ก pop ์์ฐ
let pop = document.createElement("figure");
pop.classList.add("pop");
pop.innerHTML = `
<iframe src="https://www.youtube.com/embed/${vidId}" frameborder="0" width='100%' height='100%' allowfullscreen></iframe>
<span class='btnClose'>close</span>
`;
youtubeList.append(pop);
});
์ด๊ฒ ๋ด๊ฐ ๋ง๋ค์ด์ค popup์ธ๋ฐ ์ ํฌ๋ธ ๋ฆฌ์คํธ๋ฅผ ํด๋ฆญํ์ ๋ ๊ธฐ์กด์ ๊ฑธ๋ ค์๋ aํ๊ทธ ์ด๋ฒคํธ๋ฅผ ๋ง๊ณ
์ ํฌ๋ธ๋ฆฌ์คํธ ์์ ๋ด๊ฐ ์ฐพ์ ํ๊ฒ ์์ aํ๊ทธ์ ํด๋ฆญํ ์ ํฌ๋ธ๋ฆฌ์คํธ ์์ aํ๊ทธ๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ํด๋ฆญ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์๊ฒ ํ๋ค
๊ทธ๋ฆฌ๊ณ ์์์ aํ๊ทธ์ href ๊ฐ์ vidID๋ผ๋ ๋ณ์ ์์ ๋ด์์ฃผ๊ณ popup์ figureํ๊ทธ๋ฅผ ๋ง๋ค์ด ๊ทธ ์์ iframe๊ณผ spanํ๊ทธ๋ก ์์๊ณผ ํด๋ฆญ๋ฒํผ์ ๋ง๋ค์ด์ฃผ์์!
๊ทธ๋ฆฌ๊ณ youtubeList ์์ append๋ก popup์ฐฝ์ ๋ฐ์ด๋ฃ์๋ค
figure.pop {
position: fixed;
left: 0;
top: 0;
z-index: 100;
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.8);
display: flex;
align-items: center;
justify-content: center;
padding: 10vh;
overflow: hidden;
iframe{
width: 100%;
height: 90%;
}
.btnClose {
position: absolute;
top: 20px;
right: 20px;
color: #fff;
cursor: pointer;
}
}
์ด pop์ฐฝ์ position์ผ๋ก ๋์์ ํ๋ฉด ๊ฝ์ฐจ๊ฒ ๋ง๋ค์ด์ฃผ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ css๋ฅผ ์ด๋ ๊ฒ ์ฃผ์๋๋ฐ
์์ฃ ...?
์ fixed๊ฐ ์๋จนํ๋์....์ด๋๊น์ง๋ ๋ด๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ชป์ง ์ค์๊ณ ์คํฌ๋ฆฝํธ๋ง ๋ฏธ์น๋ฏ์ด ๊ดด๋กญํ๋คใ ใ ใ ใ ใ
๋ด๊ฐ ๊ฒฝ๋ก๋ฅผ ์๋ชปํ๋..์ถ์ด๊ฐ์ง๊ณ ๋ณ์๋ ๊ดํ ๋ฐ๊ฟ๋ณด๊ณ ..position์ด ์๋จนํ๊ฒ ๋งํฌ์ ์ด๋ ์คํ์ผ ๋๋ฌธ์ธ์ง๋ ๋ชจ๋ฅด๊ณ ....๋ฐ๋ณด...
์คํฌ๋ฆฝํธ๋ง ๊ฑด๋๋ฆฐ์ง 1์๊ฐ์ด ์ง๋ฌ์ ๋ z-index๋ ์๋จนํ๋๊ฒ ์ด์ํ ๊ฒ์ด๋ค ๊ทธ๋์ ์คํ์ผ์ ๋ดค๋๋ฐ ํน์ ๋ถ๋ชจ์์์ transform์ด ์์ด์ ๊ณ ์ ์ด ์๋๋ ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค...^^
#youtube {
padding: 0 20px;
display: flex;
align-items: center;
flex-wrap: wrap;
opacity: 0;
transform: translateY(100px);
transition: 1s;
&.on {
opacity: 1;
transform: translateY(0);
}
}
๋ถ๋ชจ ์์์ transform์ ์ฃผ์ด ํ๋ฉด์ด ๋ก๋ ๋ ํ on ํด๋์ค๋ฅผ ์ฃผ์ด ๋ฆฌ์คํธ๋ค์ด ์ค๋ฅด๋ฅต ์ฌ๋ผ์ค๋ ํจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ์ํด transform์ ์ฃผ์์๋๋ฐ ๋ด๊ฐ pop๊น์ง ์ด #youtube์์ ๋ฃ์ด์ transform๋๋ฌธ์ pop์ด ์๋จนํ๋๋ณด๋ค... ํจ๊ณผ๋ฅผ ์ ๊ฑฐํ ์๋ ์์ผ๋ #youtube ์์์ divํ๊ทธ๋ก ํ๋ฒ ๋ ๊ฐ์ธ์ฃผ๊ณ ๊ทธ ์์ ํ๊ทธ์ append.pop์ ํด์ฃผ์๋ค
๋จนํ... ์ญ์ transform์ด ๋ฌธ์ ์๋ค ์ ๋ฒ์๋ transform๋๋ฌธ์ ํ๋ฒ ํค๋งธ์๋๋ฐใ ใ ใ ใ ใ ใ
๋๋ ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด transition์ด๋ transform์ด ๋ฌธ์ ์ธ๊ฐ๋ณด๋ค...ใ ใ ์์ผ๋ก ๋งํฌ์ ํ ๋ ํ๋ฒ ๋ ๊ฐ์ธ์ฃผ๋๊ฐ ํด์ผ์ง....
ํ๋ก ํธ๊ฐ๋ฐ์๊ฐ html,css๋ฅผ ์ ์ตํ์ผ ํ๋ ์ด์ ๋ฅผ ๋ํ๋ฒ ๋๋ผ๊ณ ....๋๋ฌผ์ ํ๋ ธ๋ค
