쇼핑몰에서 상품 목록 상세내역에 많이 사용되는 아코디언을 제이쿼리로 구현하였습니다.
구현 화면
구현 영상
제이쿼리 스크립트 및 css
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
.product {
font-size: 12px;
width: 600px;
}
.accordion-container {
padding-top: 20px;
position: relative;
width: 100%;
border-bottom: 1px solid rgba(0 0 0 / 60%);
border-top: none;
outline: 0;
cursor: pointer
}
.accordion-container .article-title {
display: block;
color: #333 !important;
position: relative;
margin: 0;
line-height: 30px;
border-top: 1px solid rgb(0 0 0 / 60%);
font-size: 12px;
cursor: pointer;
}
.accordion-container .content-entry .article-title:before {
background-image: url('이미지 주소');
background-size: 100%;
width: 12px;
height: 12px;
margin-top: 9px;
content: "";
float: right;
background-repeat: no-repeat;
}
.accordion-container .content-entry.open .article-title:before {
background-image: url('이미지 주소');
}
.accordion-content {
display: none;
padding: 20px 0;
}
</style>
아코디언 jQuery 코드
<script>
$(function () {
let Accordion = function (el, multiple) {
this.el = el || {};
this.multiple = multiple || false;
let links = this.el.find('.article-title');
links.on('click', {
el: this.el,
multiple: this.multiple
}, this.dropdown)
}
Accordion.prototype.dropdown = function (e) {
let $el = e.data.el;
$this = $(this);
$next = $this.next();
$next.slideToggle();
$this.parent().toggleClass('open');
if (!e.data.multiple) {
$el.find('.accordion-content').not($next).slideUp().parent().removeClass('open');
};
}
let accordion = new Accordion($('.accordion-container'), false);
});
$(document).on('click', function (event) {
if (!$(event.target).closest('#accordion').length) {
$this.parent().toggleClass('open');
}
});
</script>
html 구조
<div class="product">
<p><strong>title</strong></p>
<p>...</p>
<section id="content">
<div class="accordion-container" id="accordion">
<!-- article1 -->
<article class="content-entry">
<h4 class="article-title">subtitle1</h4>
<div class="accordion-content">
<p>.../</p>
</div>
</article>
<!-- article2 -->
<article class="content-entry">
<h4 class="article-title">subtitle2</h4>
<div class="accordion-content">
<p>.../</p>
</div>
</article>
<!-- article3 -->
<article class="content-entry">
<h4 class="article-title">subtitle3</h4>
<div class="accordion-content">
<p>.../</p>
</div>
</article>
</div>
</section>
</div>
반응형
'개발 > Javascript' 카테고리의 다른 글
[js] input 이벤트 (ft. input 박스) (61) | 2022.12.06 |
---|---|
[js] 숫자 여부 확인 (0) | 2022.12.02 |
[js] 자바스크립트 null 이지만 0은 아닐 때 (0) | 2022.09.14 |
[js] 서버 없이 form에서 데이터 전송 기능 구현 (ft. Google Apps Mail) (1) | 2022.08.05 |
[js] 배열과 배열의 비교 (compare arrays in javascript) (64) | 2022.07.21 |
댓글