FrontEnd/JavaScript & TypeScript

[JS] Swiper-slide ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ•(๋ฐ˜์‘ํ˜•)

devwoodie 2022. 4. 26. 14:02
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“‹ Swiper

swiper๋Š” slick๊ณผ ๊ฐ™์€ ์Šฌ๋ผ์ด๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด์ง€๋งŒ jQuery๊ฐ€ ์•„๋‹Œ JavaScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์ง€์›ํ•ด์„œ
์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•˜์œ„ ๋ธŒ๋ผ์šฐ์ €(IE9)์—์„œ๋„ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ธก๋ฉด์—์„œ๋„ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.


1. ์„ค์น˜ ๋ฐฉ๋ฒ•

swiper๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • CDN์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹
  • swiper ํŒŒ์ผ์„ ์ง์ ‘ ๋‹ค์šด๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹
  • npm์œผ๋กœ ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

 
CDN

<link rel="stylesheet" href="https://unpkg.com/swiper@8/swiper-bundle.min.css"/>

<script src="https://unpkg.com/swiper@8/swiper-bundle.min.js"></script>

2. ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•(๊ตฌ์กฐ)

์‚ฌ์šฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์Šฌ๋ผ์ด๋”๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด ๋งŒ๋“ค์–ด ๋†“์€ html๋ฌธ์„œ ์•ˆ์— swiper์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์— ๋งž๋Š”
class๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์˜ํ•  ์ ์€ swiper์—์„œ ์ •ํ•ด ๋†“์€ class๋ช…์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ” swiper-container > swiper-wrapper > swiper-slide ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
์•„๋ž˜ ์ž‘์„ฑ๋œ ํƒœ๊ทธ๋ฅผ ๋ณด์‹œ๋ฉด
< HTML > - ๊ธฐ๋ณธ ๊ตฌ์กฐ

  <div class="swiper-container" id="my-swiper">
    <div class="swiper-wrapper">
        <div class="swiper-slide">1</div>
        <div class="swiper-slide">2</div>
        <div class="swiper-slide">3</div>
        <div class="swiper-slide">4</div>
        <div class="swiper-slide">5</div>
    </div>
  </div>

 
< JavaScript >
swiper ์‚ฌ์šฉ์‹œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜ ์š”์†Œ๋“ค ์ž…๋‹ˆ๋‹ค.

  const slide = new Swiper('#my-swiper', {
    slidesPerView : 'auto', // ํ•œ ์Šฌ๋ผ์ด๋“œ์— ๋ณด์—ฌ์ค„ ๊ฐฏ์ˆ˜
    spaceBetween : 6, // ์Šฌ๋ผ์ด๋“œ ์‚ฌ์ด ์—ฌ๋ฐฑ
    loop : false, // ์Šฌ๋ผ์ด๋“œ ๋ฐ˜๋ณต ์—ฌ๋ถ€
    loopAdditionalSlides : 1, // ์Šฌ๋ผ์ด๋“œ ๋ฐ˜๋ณต ์‹œ ๋งˆ์ง€๋ง‰ ์Šฌ๋ผ์ด๋“œ์—์„œ ๋‹ค์Œ ์Šฌ๋ผ์ด๋“œ๊ฐ€ ๋ณด์—ฌ์ง€์ง€ ์•Š๋Š” ํ˜„์ƒ ์ˆ˜์ •
    pagination : false, // pager ์—ฌ๋ถ€
    autoplay : {  // ์ž๋™ ์Šฌ๋ผ์ด๋“œ ์„ค์ • , ๋น„ ํ™œ์„ฑํ™” ์‹œ false
      delay : 3000,   // ์‹œ๊ฐ„ ์„ค์ •
      disableOnInteraction : false,  // false๋กœ ์„ค์ •ํ•˜๋ฉด ์Šค์™€์ดํ”„ ํ›„ ์ž๋™ ์žฌ์ƒ์ด ๋น„ํ™œ์„ฑํ™” ๋˜์ง€ ์•Š์Œ
    },
    navigation: {   // ๋ฒ„ํŠผ ์‚ฌ์šฉ์ž ์ง€์ •
        nextEl: '.swiper-button-next',
        prevEl: '.swiper-button-prev',
    },
  })

3. ์ปค์Šคํ…€ ์˜ต์…˜

  freeMode : false, // ์Šฌ๋ผ์ด๋“œ ๋„˜๊ธธ ๋•Œ ์œ„์น˜ ๊ณ ์ • ์—ฌ๋ถ€
  autoHeight : true, // true๋กœ ์„ค์ •ํ•˜๋ฉด ์Šฌ๋ผ์ด๋” ๋ž˜ํผ๊ฐ€ ํ˜„์žฌ ํ™œ์„ฑ ์Šฌ๋ผ์ด๋“œ์˜ ๋†’์ด์— ๋งž๊ฒŒ ๋†’์ด๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  a11y : false, // ์ ‘๊ทผ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜(์ ‘๊ทผ์„ฑ ๊ด€๋ จ ๋Œ€์ฒด ํ…์ŠคํŠธ ์„ค์ •์ด ๊ฐ€๋Šฅ) - api๋ฌธ์„œ ์ฐธ๊ณ !
  resistance : false, // ์Šฌ๋ผ์ด๋“œ ํ„ฐ์น˜์— ๋Œ€ํ•œ ์ €ํ•ญ ์—ฌ๋ถ€ ์„ค์ •
  slideToClickedSlide : true, // ํ•ด๋‹น ์Šฌ๋ผ์ด๋“œ ํด๋ฆญ์‹œ ์Šฌ๋ผ์ด๋“œ ์œ„์น˜๋กœ ์ด๋™
  centeredSlides : true // true์‹œ์— ์Šฌ๋ผ์ด๋“œ๊ฐ€ ๊ฐ€์šด๋ฐ๋กœ ๋ฐฐ์น˜
  allowTouchMove : true, // false์‹œ์— ์Šค์™€์ดํ•‘์ด ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ฒ„ํŠผ์œผ๋กœ๋งŒ ์Šฌ๋ผ์ด๋“œ ์กฐ์ž‘์ด ๊ฐ€๋Šฅ
  watchOverflow : true // ์Šฌ๋ผ์ด๋“œ๊ฐ€ 1๊ฐœ ์ผ ๋•Œ pager, button ์ˆจ๊น€ ์—ฌ๋ถ€ ์„ค์ •
  slidesOffsetBefore : number, // ์Šฌ๋ผ์ด๋“œ ์‹œ์ž‘ ๋ถ€๋ถ„ ์—ฌ๋ฐฑ
  slidesOffsetAfter : number, // ์Šฌ๋ผ์ด๋“œ ์‹œ์ž‘ ๋ถ€๋ถ„ ์—ฌ๋ฐฑ

  pagination : {   // ํŽ˜์ด์ € ๋ฒ„ํŠผ ์‚ฌ์šฉ์ž ์„ค์ •
    el : '.pagination',  // ํŽ˜์ด์ € ๋ฒ„ํŠผ์„ ๋‹ด์„ ํƒœ๊ทธ ์„ค์ •
    clickable : true,  // ๋ฒ„ํŠผ ํด๋ฆญ ์—ฌ๋ถ€
    type : 'bullets', // ๋ฒ„ํŠผ ๋ชจ์–‘ ๊ฒฐ์ • "bullets", "fraction" 
    renderBullet : function (index, className) {  // className์ด ๊ธฐ๋ณธ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ํ•„์ˆ˜ ์„ค์ •
      return '<a href="#" class="' + className + '">' + (index + 1) + '</a>'
    },
    renderFraction: function (currentClass, totalClass) { // type์ด fraction์ผ ๋•Œ ์‚ฌ์šฉ
      return '<span class="' + currentClass + '"></span>' +
             '<span class="' + totalClass + '"></span>';
    }
  },

4. ๋ฐ˜์‘ํ˜• ์„ค์ •

swiper๋Š” slick๊ณผ ๊ฐ™์ด breakpoints๋ผ๋Š” ๊ฐ์ฒด๋กœ ๋ฐ˜์‘ํ˜• ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  var swiper = new Swiper('#my-swiper', {
        slidesPerView: 1, //640~1024 ํ•ด์ƒ๋„ ์™ธ ๋ ˆ์ด์•„์›ƒ ๋ทฐ ๊ฐœ์ˆ˜
        spaceBetween: 10, //์œ„ slidesPerview ์—ฌ๋ฐฑ
        breakpoints: { //๋ฐ˜์‘ํ˜• ์กฐ๊ฑด ์†์„ฑ
          640: { //640 ์ด์ƒ์ผ ๊ฒฝ์šฐ
            slidesPerView: 2, //๋ ˆ์ด์•„์›ƒ 2์—ด
          },
          768: {
            slidesPerView: 3,
          },
          1024: {
            slidesPerView: 4,
          },
        }
  });

728x90
๋ฐ˜์‘ํ˜•