๐ 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,
},
}
});