728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ์ค๋์ ์ด์ ์ ๋ง๋ค์๋ ํญ ๊ธฐ๋ฅ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์กฐ๊ธ ๊ฐ์ ํด๋ณด์๋ค.
๐ JavaScript : ๊ธฐ์กด
for (let i = 0; i < $('.tab-button').length; i++){
$('.tab-button').eq(i).on('click', function(){
$('.tab-button').removeClass('active');
$('.tab-content').removeClass('show');
$('.tab-button').eq(idx).addClass('active');
$('.tab-content').eq(idx).addClass('show');
})
}
- ๊ธฐ์กด์ JavaScript ์ฝ๋๋ for ๋ฌธ ์์ ๋ฃ์ ๊ธฐ๋ฅ๋ค์ ๋จ์ํ ๋์ดํ ๊ฒ์ด์๋ค.
๐ JavaScript : 1์ฐจ ์์
function openTab(idx){
$('.tab-button').removeClass('active');
$('.tab-content').removeClass('show');
$('.tab-button').eq(idx).addClass('active');
$('.tab-content').eq(idx).addClass('show');
}
for (let i = 0; i < $('.tab-button').length; i++){
$('.tab-button').eq(i).on('click', function(){
openTab(i);
})
}
- 1์ฐจ๋ก ์์ ํ ๋ฒ์ ์ ์ผํ๋ณด๋ฉด ์ฝ๋๊ฐ ๋ง์์ก์ง๋ง... ํญ์ ํ์ฑํํ๋ ๊ธฐ๋ฅ์ ์ฝ๋๋ฅผ ๋ฐ๋ก ํจ์๋ก ๋ถ๋ฆฌํ ํ, ํด๋น ํจ์๋ฅผ for ๋ฌธ ์์ ๋ฃ์ด์ ํจ์๋ช ์ ๋ณด๊ณ ์ด๋ค ๊ธฐ๋ฅ์ธ์ง ๋ฐ๋ก ์ถ์ธก์ด ๊ฐ๋ฅํ๋๋ก ์ข ๋ ๋ช ๋ฃํ๊ฒ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ์๋ค.
๐ JavaScript : 2์ฐจ ์์
- 2์ฐจ๋ก ์์ ํ ๋ฒ์ ์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง ํ์๊ณผ dataset์ ํ์ฉํ์๋ค.
- ์ฐ์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ์ ์ํ์๋ฉด, ํน์ ํ๋ฉด ์์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํด๋น ์ด๋ฒคํธ๊ฐ ๋ ์์์ ํด๋นํ๋ ํ๋ฉด ์์๋ค๋ก ์ฐ๋ฌ์ ์ ๋ฌ๋์ด ๊ฐ๋ ํน์ฑ์ ์๋ฏธํ๋ค. (์ฐธ๊ณ ๋ก ์ด๋ฒคํธ ์บก์ฒ๋ง์ ์ด ๋ฐ๋ํ์์ ์๋ฏธํ๋ค.)
<div class="container mt-5">
<ul class="list">
<li class="tab-button active" data-id="0">Products</li>
<li class="tab-button" data-id="1">Information</li>
<li class="tab-button" data-id="2">Shipping</li>
</ul>
<div class="tab-content show">
<p>์ํ์ค๋ช
์
๋๋ค. Product</p>
</div>
<div class="tab-content">
<p>์ํ์ ๋ณด์
๋๋ค. Info</p>
</div>
<div class="tab-content">
<p>๋ฐฐ์ก์ ๋ณด์
๋๋ค. Shipping</p>
</div>
</div>
- ์ฆ, tab-button ์ ํด๋ฆญํ๋ฉด ๊ทธ tab-button ํด๋์ค๋ฅผ ๋ฌถ๊ณ ์๋ list ํด๋์ค๋ก ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ์ ๋ฌ๋๊ณ , ๋ ๊ทธ ์์ container ํด๋์ค์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ์ ๋ฌ๋๋ ๊ฒ์ด๋ค.
function openTab(idx){
$('.tab-button').removeClass('active');
$('.tab-content').removeClass('show');
$('.tab-button').eq(idx).addClass('active');
$('.tab-content').eq(idx).addClass('show');
}
$('.list').click(function(e){
openTab(e.target.dataset.id);
})
// e.target : ์ง๊ธ ์ค์ ๋ก ํด๋ฆญํ ์์, JavaScript ๋ฌธ๋ฒ
// e.currentTarget : ์ง๊ธ ์ด๋ฒคํธ๋ฆฌ์ค๋๊ฐ ๋ฌ๋ ค์๋ ์์, JavaScript ๋ฌธ๋ฒ
// this : e.currentTarget ๊ณผ ๋์ผ, JavaScript ๋ฌธ๋ฒ
// $(this) : e.currentTarget ๊ณผ ๋์ผ, jQuery ๋ฌธ๋ฒ
// e.preventDefault() : ๊ธฐ๋ณธ๋์์ ๋ง๋ ํจ์, JavaScript ๋ฌธ๋ฒ
- ๊ทธ๋์ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ์์ฉํ์๋ฉด tab-button ์ ํด๋ฆญํ๋ฉด ์ด์ฐจํผ list ํด๋์ค๊ฐ ํด๋ฆญ๋ ํ ๋, ์์ list ํด๋์ค์ ํด๋ฆญ์ด๋ผ๋ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ฌ์๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ list ํด๋์ค์ ํ์ ํด๋์ค์ธ tab-button ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ๊ฐ ์กด์ฌํ๋ฏ๋ก, ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ํด๋ฆญํ tab-button ์ด ์ด๋ค ๊ฒ์ธ์ง ํ์ธํ์ฌ ๊ทธ์ ํด๋นํ๋ ํญ์ openTab ํจ์๋ฅผ ์ด์ฉํ์ฌ ํ์ฑํํด์ผ ํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ฌ๊ธฐ์ ์๋ฌธ์ด ์๊ธด๋ค. ์ ๊ตณ์ด.. tab-button ํด๋์ค์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ฌ๋ฉด ๋ ๊ฒ์, list ํด๋์ค์ ๋ค๋ ๊ฒ์ผ๊น?
- ๊ทธ ์ด์ ๋ tab-button ์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ค๋ ๊ฒฝ์ฐ ์ด 3๊ฐ์ ์ด๋ฒคํธ๋ฆฌ์ค๋๊ฐ ํ์ํ์ง๋ง list ํด๋์ค์ ๋ฌ๋ฉด 1๊ฐ์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ง ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ์ด๋ ๊ฒ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ์ค์ด๋ฉด ์ฐ์ ์ ์ผ๋ก ์ฝ๋์์ด ์ค๊ณ , ๋ฐ๋ณต๋ฌธ์ ์ฐ์ง ์์๋ ๋๋ฉฐ, ๋จ์ ๋ ์ฌ์ฉํ๋ค๋ ์ฅ์ ์ด ์๋ค.
- ์ฌ๊ธฐ๋ค dataset ์ ์ฌ์ฉํ๋ฉด ํจ์ฌ ์ฝ๋๊ฐ ์ค์ด๋ ๋ค.
- ์ฐ์ html ํ์ผ์์ ์ํ๋ ํ๊ทธ์ data-์๋ช ="๊ฐ" ์ ์ ๋๋ค. (์ด ๋ถ๋ถ์ ๊ฐ๋ฐ์๋ง ์ ์ ์๋ ๋ถ๋ถ์ด๋ค.)
- ์ฌ์ฉํ๊ณ ์ํ ๋๋ JavaScript ๋ก ํด๋น ์์๋ฅผ ์ฐพ์ ๋ค์ ๋ค์ .dataset.์๋ช ์ ๋ถ์ด๋ฉด ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
- ๊ทธ๋์ ๋ง์ฝ ์ฌ์ฉ์๊ฐ ๋๋ฅธ ํญ์ด ์ฒซ๋ฒ์งธ ํญ์ด๋ผ๋ฉด, e.target ์ document.querySelectorAll('.tab-button')[0]์ด ๋๊ณ ๊ทธ๊ฒ์ dataset.id ๋ 0 ์ด๋ฏ๋ก openTab(0) ์ด ์คํ๋์ด ์ฒซ๋ฒ์งธ ํญ์ ํ์ดํ์ด ํ์ฑํ๋๋ฉด์ ํด๋น ๋ด์ฉ์ด ๋ณด์ด๊ฒ ๋๋ ๊ฒ์ด๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > JavaScript jQuery' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript / jQuery] ์ผํ๋ชฐ ์ํ ์ง์ด ๋ฐ ์ํ ์ ๋ ฌ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.03.09 |
---|---|
[JavaScript / jQuery] ์ธํฐ๋ ํฐ๋ธ form ๋ง๋ค๊ธฐ (0) | 2022.03.07 |
[JavaScript / jQuery] ํญ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.03.06 |
[JavaScript / jQuery] Scroll ์ด๋ฒคํธ๋ก ์ฌ๋ฏธ์๋ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (0) | 2022.03.06 |
[JavaScript / jQuery] ์บ๋ฌ์ (์ด๋ฏธ์ง ์ฌ๋ผ์ด๋) ๋ง๋ค๊ธฐ (0) | 2022.03.05 |