문제 설명
슬라이드다운 탭이 예상대로 작동하지 않음 (Slide‑down tabs not working as expected)
저는 jQuery를 사용하여 사용자 정의 기반 탭을 만들었습니다. 규칙은 탭을 클릭하면 fadeIn
효과와 함께 콘텐츠가 아래로 슬라이드된다는 것입니다. 다른 탭을 클릭하면 slideUp
이 아니라 fadeIn
효과와 함께 탭 2의 콘텐츠가 표시됩니다. 탭 2(이미 열려 있음)를 다시 클릭하면 탭 컨테이너가 위로 슬라이드됩니다.
처음에는 작동하지만 동일한 탭을 다시 클릭하면(슬라이드 후) 약간의 시간이 걸립니다. 미끄러지는 시간도 매끄럽지 않습니다.
내가 뭘 잘못하고 있는 걸까요?
$(document).ready(function() {
$('.tabs .col‑3 a').click(function(e) { // Or bind to any other event you like, or call manually
e.preventDefault();
var hrefid = $(this).attr("href");
var tabid = ($(this).attr("href")).replace('#', ''); // remove #
var getContent = $(hrefid).html();
$('#maintabcontent').hide().html(getContent).fadeIn(1400);
$('span.plus').text("+");
var $t = $('.tab‑container');
if ($(this).parent().hasClass('active')) {
$(this).find('span').text("+");
$t.slideUp(function() {
$('#maintabcontent').html('');
});
$(this).parent().removeClass('active');
} else {
$(this).find('span').text("‑");
$t.slideDown(600, function() {
});
if ($t.is(':visible')) {
$('.col‑3').removeClass('active');
$(this).parent().addClass('active');
}
}
});
});
.container {
margin: 0 auto;
max‑width: 1280px;
overflow: hidden;
position: relative;
}
.full‑width {
background: #dfdedb none repeat scroll 0 0;
width: 100%;
}
.main‑container {
margin: 0 auto;
max‑width: 1220px;
}
.padding‑top‑bottom‑small {
padding‑bottom: 1rem;
padding‑top: 1rem;
}
.text‑center {
text‑align: center;
}
.col‑3 {
display: inline‑block;
max‑width: 403px;
overflow: hidden;
position: relative;
vertical‑align: top;
width: 32.5%;
}
.tabs .col‑3 {
border‑right: 2px solid #ffffff;
cursor: pointer;
}
.tab‑container {
background: #505050 none repeat scroll 0 0;
display: none;
position: relative;
}
.main‑container {
margin: 0 auto;
max‑width: 1220px;
}
.padding‑top‑bottom‑big {
padding‑bottom: 2rem;
padding‑top: 2rem;
}
.tab‑content {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="full‑width container tabs">
<div class="main‑container">
<div class="col‑3 first text‑center padding‑top‑bottom‑small"> <a href="#tab‑1"><h3 class="lato‑reg mediumfontx4 orange">How to Sell <span class="deep‑grey padding‑left‑tiny plus" data‑tab="tab‑1">+</span></h3></a>
</div>
<div class="col‑3 second text‑center padding‑top‑bottom‑small"> <a href="#tab‑2"><h3 class="lato‑reg mediumfontx4 orange">Finance <span class="deep‑grey padding‑left‑tiny plus" data‑tab="tab‑1">+</span></h3></a>
</div>
<div class="col‑3 text‑center padding‑top‑bottom‑small"> <a href="#tab‑3"><h3 class="lato‑reg mediumfontx4 orange">Market Intelligence <span class="deep‑grey padding‑left‑tiny plus" data‑tab="tab‑1">+</span></h3></a>
</div>
</div>
</div>
<div class="tab‑container">
<div class="main‑container padding‑top‑bottom‑big" id="maintabcontent"></div>
</div>
<div id="tab‑1" class="tab‑content">Tab Content 1</div>
<div id="tab‑2" class="tab‑content">Tab Content 2</div>
<div id="tab‑3" class="tab‑content">Tab Content 3</div>
참조 솔루션
방법 1:
Add stop()
before fadeIn()
:
$('#maintabcontent').hide().html(getContent).stop().fadeIn(1400);
That will stop any running animations and prevent the jerkiness you're experiencing.
(by Raj、Rick Hitchcock)