JS
swiper js 카테고리별로 보여주기
ᚁ ᚂ ᚃ ᚄ ᚅ
2024. 4. 3. 19:13
반응형
swiper js 를 사용해서 slide 화면을 보여주는 경우가 많은데 세부 카테고리 버튼을 두고서 클릭시 해당 카테고리 slide 내용만 보여주는 방법
참고 : https://codepen.io/lpla/pen/QWQErNr
<div class="cate">
<h1 class="active">전체</h1>
<h1>음료</h1>
<h1>빵</h1>
<h1>과일</h1>
</div>
<div class="view_section">
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide" data-type="음료">
<div class="sample_img">
<img src="https://cdn.pixabay.com/photo/2014/09/12/18/20/can-443123_960_720.png">
</div>
<div class="sample_name">
<p>콜라</p>
</div>
</div>
<div class="swiper-slide" data-type="빵">
<div class="sample_img">
<img src="https://cdn.pixabay.com/photo/2012/04/14/15/37/cheeseburger-34315_960_720.png">
</div>
<div class="sample_name">
<p>햄버거</p>
</div>
</div>
<div class="swiper-slide" data-type="음료">
<div class="sample_img">
<img src="https://cdn.pixabay.com/photo/2014/04/03/11/51/milk-312369_960_720.png">
</div>
<div class="sample_name">
<p>우유</p>
</div>
</div>
<div class="swiper-slide" data-type="음료">
<div class="sample_img">
<img src="https://cdn.pixabay.com/photo/2012/04/14/15/14/coffee-34251_960_720.png">
</div>
<div class="sample_name">
<p>커피</p>
</div>
</div>
<div class="swiper-slide" data-type="빵">
<div class="sample_img">
<img src="https://cdn.pixabay.com/photo/2013/07/12/14/13/sandwich-148023_960_720.png">
</div>
<div class="sample_name">
<p>샌드위치</p>
</div>
</div>
<div class="swiper-slide" data-type="빵">
<div class="sample_img">
<img src="https://cdn.pixabay.com/photo/2018/03/01/03/51/chocolate-cake-3189673_960_720.png">
</div>
<div class="sample_name">
<p>케익</p>
</div>
</div>
<div class="swiper-slide" data-type="과일">
<div class="sample_img">
<img src="https://cdn.pixabay.com/photo/2013/07/13/11/34/apple-158419_960_720.png">
</div>
<div class="sample_name">
<p>사과</p>
</div>
</div>
<div class="swiper-slide" data-type="과일">
<div class="sample_img">
<img src="https://cdn.pixabay.com/photo/2016/04/01/11/31/banana-1300390_960_720.png">
</div>
<div class="sample_name">
<p>바나나</p>
</div>
</div>
</div>
</div>
</div>
.cate { margin: 30px 0 0 30px; }
.cate h1 { cursor: pointer; margin: 0 0 10px; }
.cate h1.active { color: #174ec9; }
.swiper-container { margin: 50px auto; width: 1000px; }
.swiper-slide { text-align: center; }
.swiper-slide img { max-height: 350px; }
.sample_name { font-size: 32px; }
const cloneSlide = $('.view_section .swiper-wrapper').html();
const arraySlide = [];
$('.view_section .swiper-slide').each(function(i, e) {
arraySlide.push(e);
})
const mainSwiper = new Swiper('.view_section .swiper-container', {
slidesPerView: 2,
centeredSlides: true,
spaceBetween: 30,
speed: 1000,
loop: false,
loopAdditionalSlides: 1,
autoplay:{
autoplay: true,
delay: 3000,
disableOnInteraction: false
}
});
$('.cate h1').on('click', function() {
const type = $(this).text();
$('.cate h1').removeClass('active');
$(this).addClass('active');
$('.view_section .swiper-wrapper').empty();
if (type === '전체') {
$('.view_section .swiper-wrapper').append(cloneSlide);
} else {
$(arraySlide).each(function(i, e) {
const exist = $(e).attr('data-type').indexOf(type);
if (exist >= 0) {
$('.view_section .swiper-wrapper').append(e);
}
});
}
mainSwiper.update();
mainSwiper.slideTo(0);
});
<style>
.swiper-slide .desc { height: 46px; }
.swiper-slide .market-price { height: 46px; }
</style>
<div class="slide_contbox" id="myTabContent">
<div class="slide_cont show active" id="s2_cont1" role="tabpanel">
<div class="swiper main_s2_slider s2_1">
<div class="swiper-wrapper">
<?php
foreach($arPublic as $key => $datap_row)
{
$file_upload_name2 = $datap_row["file_upload_name2"];
$img_src = $file_upload_name2;
if("" == $img_src)
$img_src = "/admode/upload/etc/noimg/no_img.jpg";
echo <<<HERE
<div class="swiper-slide" data-type="{$datap_row['category']}">
<a href="sub.php?code={$code_public}&mode=view&no={$datap_row['no']}">
<div class="img gra_box">
<img src="{$img_src}" class="img-full">
</div>
<div class="tit">{$datap_row['provider']}</div>
<div class="desc">{$datap_row['title']}</div>
</a>
</div>
HERE;
}
?>
</div>
</div>
<div class="swiper-button-prev">
<i class="xi-angle-left"></i>
</div>
<div class="swiper-button-next">
<i class="xi-angle-right"></i>
</div>
</div>
</div>
<script>
const m_s2_slider1 = new Swiper(".main_s2_slider.s2_1", {
slidesPerView: 1.8,
loop: true,
//loopAdditionalSlides: 1,
speed: 500,
autoplay: {
delay: 3500,
disableOnInteraction: false,
},
navigation: {
nextEl: "#s2_cont1 .swiper-button-next",
prevEl: "#s2_cont1 .swiper-button-prev",
},
breakpoints: {
600: {
spaceBetween: 0,
slidesPerView: 4,
},
},
//observer: true, // 추가
//observeParents: true, // 추가
});
m_s6_slider1 = new Swiper(".main_s6_slider.s6_1", {
spaceBetween: 16,
slidesPerView: 1.8,
loop: true,
//loopAdditionalSlides: 1,
speed: 500,
autoplay: {
delay: 3500,
disableOnInteraction: false,
},
navigation: {
nextEl: "#s6_cont1 .swiper-button-next",
prevEl: "#s6_cont1 .swiper-button-prev",
},
breakpoints: {
600: {
spaceBetween: 0,
slidesPerView: 4,
},
},
//observer: true, // 추가
//observeParents: true, // 추가
});
const cloneSlidePublic = $('#s2_cont1 .swiper-wrapper').html();
const arraySlidePublic = [];
const cloneSlideClient = $('#s6_cont1 .swiper-wrapper').html();
const arraySlideClient = [];
$(document).ready(function () {
setSlide();
});
function setSlide()
{
setSlidePublic();
setSlideClient();
}
function setSlidePublic()
{
$('#s2_cont1 .swiper-slide').each(function(i, e) {
arraySlidePublic.push($(e).prop("outerHTML"));
})
$(".public_cat").click(function () {
m_s2_slider1.autoplay.stop();
//const type = $(this).text();
const type = $(this).attr("data-no");
$('#s2_cont1 .swiper-wrapper').empty();
if (type === '') {
$('#s2_cont1 .swiper-wrapper').append(cloneSlidePublic);
} else {
$(arraySlidePublic).each(function(i, e) {
const exist = $(e).attr('data-type').indexOf(type);
if (exist >= 0) {
$('#s2_cont1 .swiper-wrapper').append(e);
}
});
}
s_idx = 0;
$('#s2_cont1 .swiper-slide').each(function(i, e) {
$(this).attr("data-swiper-slide-index", s_idx);
s_idx++;
})
$('#s2_cont1').removeClass("slide_cont active show");
$('#s2_cont1').addClass("slide_cont active show"); //추가 안하니 slide 가 안보임
m_s2_slider1.update();
m_s2_slider1.slideTo(0);
m_s2_slider1.autoplay.start();
});
}
function setSlideClient()
{
$('#s6_cont1 .swiper-slide').each(function(i, e) {
arraySlideClient.push($(e).prop("outerHTML"));
})
$(".custom_cat").click(function () {
m_s6_slider1.autoplay.stop();
//const type = $(this).text();
const type = $(this).attr("data-no");
$('#s6_cont1 .swiper-wrapper').empty();
if (type === '') {
$('#s6_cont1 .swiper-wrapper').append(cloneSlideClient);
} else {
$(arraySlideClient).each(function(i, e) {
const exist = $(e).attr('data-type').indexOf(type);
if (exist >= 0) {
$('#s6_cont1 .swiper-wrapper').append(e);
}
});
}
s_idx = 0;
$('#s6_cont1 .swiper-slide').each(function(i, e) {
$(this).attr("data-swiper-slide-index", s_idx);
s_idx++;
})
$('#s6_cont1').removeClass("slide_cont active show");
$('#s6_cont1').addClass("slide_cont active show"); //추가 안하니 slide 가 안보임
m_s6_slider1.update();
m_s6_slider1.slideTo(0);
m_s6_slider1.autoplay.start();
});
}
</script>
반응형