728x90
swiper 기본 특성 상 swiper-slider 안에 pagination 과 navigation이 존재하며 기본적으로 슬라이더 안의 있는 리모트(pagination 과 navigation)들을 인식하게 된다.
디자인에서 pagination 과 navigation이 대상 슬라이더 밖에 존재해야할 UI가 있을 때 독립적인 하나의 슬라이더만 존재하면 문제가 되지 않다.
하지만 이와 같은 두개이상의 슬라이더가 있을 때 리모트는 정상 작동이 되지 않는다.
따라서 약간의 스크립트 수정이 필요하다.
HTML
<div class="notice__slider-frame">
<div class="swiper notice__slider">
<div class="swiper-wrapper">
<div class="swiper-slide">
<div class="swiper-slide__inner">
<div class="flex-box justify">
<div class="box-middle__top--item">
<span class="board-num__square">상시제</span>
<span class="board-num__square-green">이러닝</span>
</div>
<div class="box-middle__top--item">
<span class="state__blue">모집중</span>
</div>
</div>
<div class="box-middle__center">
<p class="cm-title-sub">자격교육(직업능력개발훈련교사)</p>
<a href="javascript:;" class="txt--m4 word-line-single">기업현장교사 심화과정 [1단계] 온라인교육 (21시간) [2022-1]차</a>
</div>
<div class="box-middle__bottom">
<ul class="list-table">
<li>
<dl class="list-definition">
<dt>접수기간</dt>
<dd>상시</dd>
</dl>
</li>
<li>
<dl class="list-definition">
<dt>신청인원</dt>
<dd><span class="gray-color--900">112</span> / 9,999</dd>
</dl>
</li>
</ul>
<ul class="list-table">
<li>
<dl class="list-definition">
<dt>교육기간</dt>
<dd>2022.01.01 ~ 2022.05.21</dd>
</dl>
</li>
<li>
<dl class="list-definition">
<dt>교육시간</dt>
<dd>온라인 21시간</dd>
</dl>
</li>
<li>
<dl class="list-definition">
<dt>지역</dt>
<dd>서울</dd>
</dl>
</li>
</ul>
</div>
</div>
</div>
<div class="swiper-slide">
<div class="swiper-slide__inner">
<div class="flex-box justify">
<div class="box-middle__top--item">
<span class="board-num__square">상시제</span>
<span class="board-num__square-green">이러닝</span>
</div>
<div class="box-middle__top--item">
<span class="state__blue">모집중</span>
</div>
</div>
<div class="box-middle__center">
<p class="cm-title-sub">자격교육(직업능력개발훈련교사)</p>
<a href="javascript:;" class="txt--m4 word-line-single">기업현장교사 심화과정 [1단계] 온라인교육 (21시간) [2022-1]차</a>
</div>
<div class="box-middle__bottom">
<ul class="list-table">
<li>
<dl class="list-definition">
<dt>접수기간</dt>
<dd>상시</dd>
</dl>
</li>
<li>
<dl class="list-definition">
<dt>신청인원</dt>
<dd><span class="gray-color--900">112</span> / 9,999</dd>
</dl>
</li>
</ul>
<ul class="list-table">
<li>
<dl class="list-definition">
<dt>교육기간</dt>
<dd>2022.01.01 ~ 2022.05.21</dd>
</dl>
</li>
<li>
<dl class="list-definition">
<dt>교육시간</dt>
<dd>온라인 21시간</dd>
</dl>
</li>
<li>
<dl class="list-definition">
<dt>지역</dt>
<dd>서울</dd>
</dl>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="fraction-remote">
<div class="swiper-button-prev"></div>
<div class="swiper-pagination"></div>
<div class="swiper-button-next"></div>
</div>
</div>
Javascript
다수의 슬라이더 갯수만큼 each문을 돌려 각각의 리모트들에게 해당 인덱스를 부여하여 type+i 와 같은 고유 번호를 붙여준후, pagination과 navigation 클래스를 지정할 때 고유 번호를 함께 붙여주면 각각 슬라이더 별로 독립적으로 정상 작동하는 것을 볼 수 있다.
var $multiSlider = $('.notice__slider-frame');
$multiSlider.find('.notice__slider').each(function(i){
$(this).siblings(".fraction-remote").find(".swiper-pagination").addClass("type"+i);
$(this).siblings(".fraction-remote").find("[class^='swiper-button']").addClass("type"+i);
var slider = new Swiper($(this), {
slidesPerView: 1,
loop: true,
observer: true,
observeParents: true,
autoplay: {
delay: 5000,
disableOnInteraction: false
},
pagination: {
el: $(this).siblings(".fraction-remote").find(".swiper-pagination.type"+i),
type: 'fraction'
},
navigation: {
nextEl: $(this).siblings(".fraction-remote").find(".swiper-button-next.type"+i),
prevEl: $(this).siblings(".fraction-remote").find(".swiper-button-prev.type"+i)
}
});
});
만약, 다수의 슬라이더의 슬라이드 지연 속도를 다르게 하고싶다면 인덱스를 가지고 아래와 같이 응용할 수 있다
(여기서 i 가 number라는 것을 콘솔로그를 통해 확인함 console.log(typeof i); )
autoplay: {
delay: (i+1)*2000,
disableOnInteraction: false
},
'DEVELOP' 카테고리의 다른 글
[React.js] github clone 로컬 충돌 해결 방법 (0) | 2022.11.10 |
---|---|
[javascript ES6] 내가 이해한 화살표 함수 (0) | 2022.10.31 |
[onmouseenter, onmouseleave] html img에 활용하기 (0) | 2022.09.16 |
[github] adding embedded git repository 가 뜨고 push 되지않을 경우 (0) | 2022.06.16 |
[CSS] flex 자식 요소 분할 방법 (0) | 2022.06.10 |