Reputation: 55
I have this jQuery Content Tab, it works great but it doesn't have any animation. I want to animate the contents as the tab is clicked (as the next content displays). I want a fading animation effect and any other effect (scroll in, etc.) that you can help with.
Demo on fiddle.
Here's the jQuery:
$(function() {
$('.tab-content').hide();
$('#tabs-nav a').bind('click', function(e) {
$('#tabs-nav a.current').removeClass('current');
$('.tab-content:visible').hide();
$(this.hash).show();
$(this).addClass('current');
e.preventDefault();
}).filter(':first').click();
});
I will really appreciate any help.
Thank you.
Upvotes: 1
Views: 6071
Reputation: 43156
$(function() {
$('.tab-content:not(:first)').hide();
$('#tabs-nav a').bind('click', function(e) {
e.preventDefault();
$this = $(this);
$target = $(this.hash);
$('#tabs-nav a.current').removeClass('current');
$('.tab-content:visible').fadeOut("slow", function() {
$this.addClass('current');
$target.fadeIn("slow");
});
}).filter(':first').click();
});
#tabs-bar {
background: #f0f0f0;
padding: 10px 8px;
}
#tabs-bar ul {
display: block;
list-style: none;
float: left;
}
#tabs-bar ul li {
list-style: none;
display: block;
float: left;
padding-right: 10px;
}
#tabs-nav li a {
list-style: none;
display: block;
padding: 10px 15px;
background: #c0c0c0;
font-size: 16px;
font-weight: 300;
color: #fff;
text-align: left;
border-top: 1px solid #ececec;
border-right: 1px solid #ececec;
border-bottom: 1px solid #ececec;
border-left: 1px solid #ececec;
border-radius: 5px;
text-decoration: none;
}
#tabs-nav li a.current,
#tabs-nav li a:hover {
border-bottom: 0px solid #ececec;
background: #ee3636;
}
#tabs-content-wrap {
background: #f6f6f6;
padding: 10px;
margin-top: 8px;
}
#tabs-content-wrap ul {
display: block;
list-style: none;
}
#tabs-content-wrap ul li {
width: 100%;
list-style: none;
display: block;
list-style: none;
}
.tab-content {
border-radius: 2px;
padding-bottom: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div id="tabs-bar">
<ul id="tabs-nav">
<li><a href="#th-tab-one" class="current">TAB ONE</a>
</li>
<li><a href="#th-tab-two">TAB TWO</a>
</li>
<li><a href="#th-tab-three">TAB THREE</a>
</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- ends tabs-bar -->
<!-- Tabs Main Content -->
<div id="tabs-content-wrap">
<ul>
<li id="th-tab-one" class="tab-content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip
ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit
augue duis dolore te feugait nulla facilisi.</li>
<!-- Ends Tab One Content -->
<li id="th-tab-two" class="tab-content">Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores
legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula
quarta decima et quinta decima.</li>
<!-- ends Tab Two Content -->
<li id="th-tab-three" class="tab-content">Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem
modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.</li>
<!-- ends Tab Three Content -->
</ul>
</div>
Similarly you can do
Side note: Hiding all the tabs using jQuery and then triggering click seems a bit hacky, i'd set the initial state using css like this and this
Upvotes: 2
Reputation: 22992
This is a fadeIn, fadeOut effect.
$(function() {
$('.tab-content').hide();
$('#th-tab-one').fadeIn('slow');
$('#one').click(function() {
$('.tab-content').hide();
$('#th-tab-one').fadeIn('slow');
})
$('#two').click(function() {
$('.tab-content').hide();
$('#th-tab-two').fadeIn('slow');
})
$('#three').click(function() {
$('.tab-content').hide();
$('#th-tab-three').fadeIn('slow');
})
});
Upvotes: 3
Reputation: 74
You can do this:
$(function(){
$('.tab-content').hide();
$('#tabs-nav a').bind('click', function(e){
$('#tabs-nav a.current').removeClass('current');
$('.tab-content:visible').slideUp();
$(this.hash).slideToggle("slow");
$(this).addClass('current');
e.preventDefault();
}).filter(':first').click();
});
Upvotes: 1