๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
javascript๐Ÿช“/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ž๋™ ์Šฌ๋ผ์ด๋“œ ๊ตฌํ˜„ํ•˜๊ธฐ (querySelector / setInterval)

by hyojinny 2023. 10. 18.

copy ์‚ฌ์ดํŠธ hb paper

 

html / css ์˜์—ญ

display flex ๋ฅผ ์ด์šฉ 

์Šฌ๋ผ์ด๋“œ ๋ฐ•์Šค์•ˆ์— ์Šฌ๋ผ์ด๋“œ๋“ค์„ ๋ฐฐ์น˜ํ•ด ๊ฐ€๋กœ๋กœ ๋ฐฐ์น˜ํ•ด์ค€๋‹ค 

 

 

์ „์ฒด ๋ฐ•์Šค๋ฅผ ๋งŒ๋“ค์–ด overflow:hidden ์„ ์‚ฌ์šฉํ•ด ์Šฌ๋ผ์ด๋“œ ์˜์—ญ์„ ๊ฐ€๋ ค์ฃผ๊ณ  ์œˆ๋„์šฐ ์ฐฝ์— ๊ฝ‰ ์ฐจ๊ฒŒ ๋ฐฐ์น˜ 


html

 

       <div class="main-slide">
          <div class="slide-box">
            <div class="slide-box__main">
              <a href="#">
                <div class="text-box">
                  <p>๊ทธ ์†Œ์ค‘ํ•œ ๊ฐ€์น˜๋ฅผ ์•Œ๊ธฐ์— ์šฐ๋ฆฌ๋Š” ๋Œ์•„๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.</p>
                  <h3>์ž์—ฐ์œผ๋กœ, ์Šค๋งˆํŠธํ•˜๊ฒŒ</h3>
                </div>
                <img src="./images/mv_01.jpg" alt="">
              </a>
            </div>
            <div class="slide-box__main">
              <a href="#">
                <div class="text-box">
                  <p>๊ทธ ์†Œ์ค‘ํ•œ ๊ฐ€์น˜๋ฅผ ์•Œ๊ธฐ์— ์šฐ๋ฆฌ๋Š” ๋Œ์•„๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.</p>
                  <h3>2</h3>
                </div>
                <img src="./images/mv_02.jpg" alt="">
              </a>
            </div>
            <div class="slide-box__main">
              <a href="#">
                <div class="text-box">
                  <p>๊ทธ ์†Œ์ค‘ํ•œ ๊ฐ€์น˜๋ฅผ ์•Œ๊ธฐ์— ์šฐ๋ฆฌ๋Š” ๋Œ์•„๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.</p>
                  <h3>3</h3>
                </div>
                <img src="./images/mv_03.jpg" alt="">
              </a>
            </div>
          </div>
        </div>

 


css

    .main-slide {
      width: 100%;
      height: 100%;
      overflow: hidden;
      position: fixed;

      .slide-box {
        height: 100%;
        width: 100%;
        display: flex;
        position: relative;

        &__main {
          height: 100%;
          width: 100%;
          // flex: none;
          flex: 0 0 auto;
          /* flex-grow: 1; flex-shrink: 1; flex-basis: auto; */

          a {
            width: 100%;
            height: 100%;
            display: block;

            .text-box {
              position: absolute;
              top: 50%;
              width: 100%;
              text-align: center;
              color: #fff;

              p {
                font-size: 18px;
              }

              h3 {
                margin-top: 20px;
                font-size: 50px;
                font-weight: 900;
              }
            }

            img {
              width: 100%;
              height: 100%;
              object-fit: cover;
            }
          }
        }
      }
    }

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ 

 

// document.getElementsByClassName()
// dom ์„ ๊ฐ€์ ธ์˜ค๊ธฐ์œ„ํ•ด์„œ ์‚ฌ์šฉ
// document objet model ๊ฐ์ฒด์ž„
// html ์—์„œ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์™€ ์†์„ฑ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฐ”๊ฟˆ

//---------------------------------------------------------------

//์ „์ฒด ์Šฌ๋ผ์ด๋“œ ํ‹€ ์„ ํƒ
const slideBox = document.querySelector('.slide-box');
console.log('slideBox: ', slideBox);

//๊ฐˆ์•„๋‚„ ์Šฌ๋ผ์ด๋“œ - class์™€ ํ•˜์œ„ ์š”์†Œ ์ „์ฒด ์„ ํƒ (๊ฐ™์€ ํด๋ž˜์Šค๋ช…์ด ์—ฌ๋Ÿฌ๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ)
const slides = document.querySelectorAll('.slide-box__main');
console.log('slides:', slides);

//ํ˜„์žฌ ์Šฌ๋ผ์ด๋“œ์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ์ง€์ •ํ•˜๊ธฐ
let currentIndex = 0;

//์Šฌ๋ผ์ด๋“œ ๋งŒ๋“ค ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ
function mainSlide() {
  currentIndex++; // ++ ์ฆ๊ฐ์—ฐ์‚ฐ์ž) ํ”ผ์—ฐ์‚ฐ์ž +1

  //์Šฌ๋ผ์ด๋“œ๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์‹œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” if๋ฌธ
  //slides ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„๋•Œ 0์œผ๋กœ ๋Œ๋ฆฐ๋‹ค
  if (currentIndex >= slides.length) {
    currentIndex = 0;
  }

  // ์ธ๋ฑ์Šค์— ๊ณฑํ•˜๊ธฐ 100 (0*100=0 / 1*100=100 / 2*100=200)
  let translatePercent = currentIndex * 100;

  // ์Šฌ๋ผ์ด๋“œ ์œ„์น˜๋ฅผ ์ธํ…์Šค * 100 ์„ ๊ณฑํ•œ ๊ฐ’๋งŒํผ ์œ„์น˜์ด๋™
  slideBox.style.transform = `translate(-${translatePercent}%)`;
}
//์Šฌ๋ผ์ด๋“œํŠน ์„ ํƒ์‹œ ์Šฌ๋ผ์ด๋“œ์œ„์น˜๋ณ€๊ฒฝ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ์ž‘์„ฑํ•œ ํ•จ์ˆ˜ ๋„ฃ์–ด์คŒ
slideBox.addEventListener('click', mainSlide);

//setIntervalํ•จ์ˆ˜๋กœ ๋‚ด๊ฐ€๋งŒ๋“  mainSlide ํ•จ์ˆ˜๊ฐ€ 2์ดˆ๋งˆ๋‹ค ์ž๋™ ์‹คํ–‰
setInterval(mainSlide, 2000);

 

 

๋‹ค์Œ๋ฒˆ์—” ํŽ˜์ด์ง€ ๋„ค์ด์…˜์„ ๋„ฃ์–ด์„œ ๋‹ค์‹œ ๋„์ „

 

 


setInterval ์ฐธ๊ณ  ๋งํฌ

https://www.daleseo.com/js-timer/

๋Œ“๊ธ€