position:fixed๊ฐ€ ์•ˆ๋จนํžˆ๋Š” ์ด์Šˆ

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๋ฅผ ์ž˜ ์ตํ˜€์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ๋˜ํ•œ๋ฒˆ ๋А๋ผ๊ณ ....๋ˆˆ๋ฌผ์„ ํ˜๋ ธ๋‹ค