-
[JS] Swiper.js ์ด๋ฏธ์ง ์ฌ๋ผ์ด๋ ์คํฌ๋ฆฝํธ ์ฌ์ฉ๋ฒ (+๋ฐ์ํ)Coding 2022. 11. 4. 16:58๋ฐ์ํ
1. Get Started! Swiper.js ํ๋ก์ ํธ์ ๋ค์ด๋ก๋ํ๊ธฐ
swiper.js๋ฅผ ํ๋ก์ ํธ์ ๋ฐ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๊ฐ์ ํ๋ก์ ํธ ์ธ์ด๋ ๋ฐฉ์์ ๋ง๊ฒ ๋ฐ์์ฃผ๋ฉด ๋ฉ๋๋ค.
NPM์ผ๋ก ๋ฐ๋ ๋ฐฉ๋ฒ
$ npm install swiper
์ธ์คํจ์ ๊ฐ๋จํฉ๋๋ค.
// import Swiper JS import Swiper from 'swiper'; // import Swiper styles import 'swiper/css';
์ธ์คํจ ํ ๊ธฐ๋ณธ import ์ฝ๋์ ๋๋ค.
ํ๋ก์ ํธ์ ํ์ํ ์ปดํฌ๋ํธ๋ค๋ง ๊ณจ๋ผ์ import ํด์ฌ ์๋ ์์ต๋๋ค. ์ ๋ ์ ์ฒด๋ฅผ ๋ฐ์์ ์ฐ๋ ๊ฒ ๋ง์์ด ํธํด์ ๋ฐ๋ก ๋ฐ์ง ์์ต๋๋ค.
ํ์ํ์ ๋ถ๋ค์ Swiper.js Get Started ํ์ด์ง์์ ํ์ธํ ์ ์์ต๋๋ค.
CDN ์ฃผ์๋ก ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
๊ทธ๋ฅ ๋ด ํ๋ก์ ํธ์ ์๋ cdn ์ฃผ์๋ฅผ ๊ทธ๋๋ก ๋ถ์ฌ ๋ฃ์ผ๋ฉด ๊ฐ๋จํ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css" /> <script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>
css๋ ํ์๋ก ๋ถ๋ฌ์์ผ ํฉ๋๋ค.
ํ์ผ ์ง์ ๋ค์ด๋ก๋ํ๊ธฐ
ํ์ผ์ ํ๋ก์ ํธ์ ์ง์ ์ถ๊ฐํด์ ์งํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์ด๋ก๋ํ ์ ์๋ ๋งํฌ์ ๋๋ค.
https://www.jsdelivr.com/package/npm/swiper
jsDelivr - A free, fast, and reliable CDN for Open Source
Supports npm, GitHub, WordPress, Deno, and more. Largest network and best performance among all CDNs. Serving more than 80 billion requests per month. Built for production use.
www.jsdelivr.com
2. ๊ธฐ๋ณธ ์ฌ๋ผ์ด๋ ๋ง๋ค๊ธฐ
<!-- ์ฌ๋ผ์ด๋ ์ ์ฒด ๊ฐ์ธ๋ ์ปจํ ์ด๋ --> <div class="swiper mySwiper"> <!-- wrapper ์ถ๊ฐ ํ์ --> <div class="swiper-wrapper"> <!-- ์ค์ ์ด๋ฏธ์ง๋ ์ปจํ ์ธ ๊ฐ ๋ค์ด๊ฐ slide๋ค --> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> ... </div> <!-- pagination ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ --> <div class="swiper-pagination"></div> <!-- navigation buttons ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ --> <div class="swiper-button-prev"></div> <div class="swiper-button-next"></div> </div> <script> var swiper = new Swiper(".mySwiper", { // ์ต์ ์์ ๋ถ๋ถ navigation: { nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev", }, pagination: { el: ".swiper-pagination", }, // ์ต์ ๋ ๋ถ๋ถ }); </script>
๊ธฐ๋ณธ ์ฌ๋ผ์ด๋ ๊ตฌ์กฐ์ ๋๋ค.
Swiper๋ ๋ง์ฐ์ค ๋๋๊ทธ๋ ํฐ์น๋ก ์ข์ฐ ์ฌ๋ผ์ด๋๋ฅผ ๋๊ธธ ์ ์๊ธฐ ๋๋ฌธ์
navigation๊ณผ pagination ์ด ํ์ ์์ผ๋ฉด ์ต์ ๋ถ๋ถ์ ์ง์ฐ๊ณ ์คํ์ํค๋ฉด ๋ฉ๋๋ค.
ํ์ง๋ง pagination์ ์ฌ์ฉ์๊ฐ ๋ณด๊ธฐ์ ์๋ ๊ฒ ์ข์ต๋๋ค.
์์ )
3. ์ฌ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ก ์คํฌ๋กค ๋ฐ ๋ง๋ค๊ธฐ
ํด๋ผ์ด์ธํธ๋ ๋ณดํต ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ์คํฌ๋กค๋ฐ ๋์์ธ์ ์ข์ํ์ง ์์ต๋๋ค.
๊ทธ๋์ ๊ผญ ๋ฐ๊พธ๊ณ ์ถ์ด ํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ๋ง๋๋ค๋ฉด, ์คํฌ๋กค๋ฐ ๋์์ธ์ ์์ ํ ์ ์๊ฒ ํด์ฃผ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํด์ ๋ง๋ค์ด ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค. ํ์ง๋ง ๊ทธ ํ๋ก์ ํธ์์ Swiper js๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ๋ฐ๋ก ์คํฌ๋กค๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.
<div class="swiper mySwiper"> <div class="swiper-wrapper"> <div class="swiper-slide"> <h4>Scroll Container</h4> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. In luctus, ex eu sagittis faucibus, ligula ipsum sagittis magna, et imperdiet dolor lectus eu libero. Vestibulum venenatis eget turpis sed faucibus. Maecenas in ullamcorper orci, eu ullamcorper sem. Etiam elit ante, luctus non ante sit amet, sodales vulputate odio. Aenean tristique nisl tellus, sit amet fringilla nisl volutpat cursus. Quisque dignissim lectus ac nunc consectetur mattis. Proin vel hendrerit ipsum, et lobortis dolor. Vestibulum convallis, nibh et tincidunt tristique, nisl risus facilisis lectus, ut interdum orci nisl ac nunc. Cras et aliquam felis. Quisque vel ipsum at elit sodales posuere eget non est. Fusce convallis vestibulum dolor non volutpat. Vivamus vestibulum quam ut ultricies pretium. </p> <p> Suspendisse rhoncus fringilla nisl. Mauris eget lorem ac urna consectetur convallis non vel mi. Donec libero dolor, volutpat ut urna sit amet, aliquet molestie purus. Phasellus faucibus, leo vel scelerisque lobortis, ipsum leo sollicitudin metus, eget sagittis ante orci eu ipsum. Nulla ac mauris eu risus sagittis scelerisque iaculis bibendum mauris. Cras ut egestas orci. Cras odio risus, sagittis ut nunc vitae, aliquam consectetur purus. Vivamus ornare nunc vel tellus facilisis, quis dictum elit tincidunt. Donec accumsan nisi at laoreet sodales. Cras at ullamcorper massa. Maecenas at facilisis ex. Nam mollis dignissim purus id efficitur. </p> ... </div> </div> <div class="swiper-scrollbar"></div> </div> <script> var swiper = new Swiper(".mySwiper", { direction: "vertical", slidesPerView: "auto", freeMode: true, scrollbar: { el: ".swiper-scrollbar", }, mousewheel: true, }); </script>
html ๊ตฌ์กฐ์ ํ์ํ script ์ต์ ์ ๋๋ค.
์์ )
๋ฐ์คํฌํฑ์์ mousewheel ๋ ์ ๋๊ณ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ํฐ์น๋ ์ ๋ฉ๋๋ค.
mousewheel4. ๋ฐ์ํ ์ฌ๋ผ์ด๋ ์ ์ฉํ๊ธฐ
Swiper๋ ๋ฐ์ํ ์น์๋ ์ ์ฉํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
mobile first๋ก ์ ์ฉ๋๊ณ , breakpoints ๊ธฐ์ค์ px์ด๋ ๋น์จ๋ก ์ค์ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ณธ์ window ๋์ด๋ก ๋ฐ์ํ์ง๋ง ๋ด๊ฐ ์ง์ ํ container ์๋ฆฌ๋จผํธ ๊ธฐ์ค์ผ๋ก๋ ์ ์ฉํ ์ ์์ต๋๋ค. (breakpointsBase ํ๋ผ๋ฏธํฐ)
<div class="swiper mySwiper"> <div class="swiper-wrapper"> <div class="swiper-slide">Slide 1</div> <div class="swiper-slide">Slide 2</div> <div class="swiper-slide">Slide 3</div> <div class="swiper-slide">Slide 4</div> <div class="swiper-slide">Slide 5</div> <div class="swiper-slide">Slide 6</div> <div class="swiper-slide">Slide 7</div> <div class="swiper-slide">Slide 8</div> <div class="swiper-slide">Slide 9</div> </div> <div class="swiper-pagination"></div> </div> <script> var swiper = new Swiper(".mySwiper", { // ๊ธฐ๋ณธ ์ต์ (parameters) // window ๋์ด 640px ๋ณด๋ค ์์๋ slidesPerView: 1, spaceBetween: 10, pagination: { el: ".swiper-pagination", clickable: true, }, // ๋ฐ์ํ breakpoints : px ๊ธฐ์ค breakpoints: { // window ๋์ด 640px ~ 767px 640: { slidesPerView: 2, spaceBetween: 20, }, // window ๋์ด 768px ~ 1023px 768: { slidesPerView: 4, spaceBetween: 40, }, // window ๋์ด 1024px ~ 1024: { slidesPerView: 5, spaceBetween: 50, }, }, // using "ratio" endpoints : ํ๋ฉด ๋น์จ ๊ธฐ์ค breakpoints: { '@0.75': { slidesPerView: 2, spaceBetween: 20, }, '@1.00': { slidesPerView: 3, spaceBetween: 40, }, '@1.50': { slidesPerView: 4, spaceBetween: 50, }, } // breakpoints ๊ธฐ์ค์ ๋ณ๊ฒฝํ ์ ์๋ ์ต์ breakpointsBase: 'window' }); </script>
์์ )
5. ๊ทธ ์ธ ์์ฃผ ์ฐ๋ ์ต์ (Parameter) ์ ๋ฆฌ
Parameters Type Default Description initialSlide number 0 0๋ฒ์ด ์ฒซ๋ฒ์งธ ์ฌ๋ผ์ด๋.
๊ทธ ์ธ ์ซ์๋ก ์ค์ ์ ํด๋น ์ฌ๋ผ์ด๋๊ฐ ์ ์ผ ๋จผ์ ๋ณด์ ๋๋ค.loop boolean false true ๋ก ์ค์ ์ ์ฌ๋ผ์ด๋๊ฐ ๊ณ์ ๋ฐ๋ณต๋ฉ๋๋ค. slidesPerGroup number 1 ์ค์ ํ ์ซ์์ ๊ฐ์๋๋ก ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ฌ ์ฌ๋ผ์ด๋๊ฐ ๋์ด๊ฐ๋๋ค. slidesPerView number | 'auto' 1 ์ฌ๋ผ์ด๋๊ฐ ๋ช๊ฐ ๋ณด์ด๊ฒ ํ ์ง ์ค์ ํฉ๋๋ค. spaceBetween number 0 ์ฌ๋ผ์ด๋ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์ค ์ ์์ต๋๋ค. 1 = 1px speed number 300 ์ฌ๋ผ์ด๋๊ฐ ๋์ด๊ฐ๋ ์๋ autoplay boolean | AutoplayOptions Description ์ฐธ๊ณ ์ฌ๋ผ์ด๋๊ฐ ์๋์ผ๋ก ๋์ด๊ฐ๋๋ก ์ค์
{
delay: number(3000),
disableOnInteraction: boolean(true),
pauseOnMouseEnter: boolean(false),
...
}
delay : ๋ค์ ์ฌ๋ผ์ด๋๊ฐ ๋์ด๊ฐ๊ธฐ ์ ๊น์ง์ ์๊ฐ
disableOnInteraction: ์ฌ์ฉ์๊ฐ ์ฌ๋ผ์ด๋์ ์ํธ์์ฉ ํ๊ณ ๋ ํ, autoplay๋ฅผ ๋ค์ ์์ํ ์ง ์ฌ๋ถ
pauseOnMouseEnter: ์ฌ๋ผ์ด๋์ ๋ง์ฐ์ค ์ค๋ฒ์ autoplay ์ผ์์ ์ง ์ฌ๋ถeffect 'slide' | 'fade' | .. 'slide' ์ฌ๋ผ์ด๋๊ฐ ๋์ด๊ฐ๋ ํจ๊ณผ centeredSlides boolean false index ์ฌ๋ผ์ด๋๊ฐ ๊ฐ์ด๋ฐ ๋ณด์ด๋๋ก ์ค์ ๋ฐ์ํ'Coding' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CSS] Hover ํ๋ ํ์ ๋ค(siblings) ์คํ์ผ ์ ์ฉ (0) 2023.05.12 [Javascript] ์นด์ดํธ๋ค์ด ๋ง๋ค๊ธฐ (0) 2023.02.15 [CSS] ๋์์ ๋ฐ์ํ ์ฌ์ดํธ์ ์ถ๊ฐํ๊ธฐ (0) 2022.11.10 [HTML] ์ด๋ฏธ์ง๋งต ์ฝ๊ฒ ๋ง๋ค๊ธฐ (+JS+๋ชจ๋ฐ์ผ์ ์ ์ฉํ๊ธฐ) (0) 2022.11.01 ์๋๋ก์ด๋ ์น๋ทฐ์์ ์๋ฆฌ๋จผํธ ์คํฌ๋กค๋ฐ๊ฐ ๋ณด์ด์ง ์๋ ํ์ (0) 2022.04.14