I just finished this website (a professional portfolio) where I had to hide and show content panels in an alternate way. The main problem I've encountered is basically to determine whether a panel is visible or not, that is, if its current state has been yet modified by a jQuery action.
When a visitor clicks on a tab, the corresponding panel must be revealed. Of course when this action takes place, all other visible panels must be hidden (and so on). Here's how this is done:
this.hideShowPanels = function() {
var ids = [];
$('#navigation a').each(function() {
var $a = $(this);
var id = $a.attr('href');
$(id).hide();
ids.push(id);
$a.click(function() {
$(id).slideDown(500);
for(var i=0; i<ids.length; i++) {
if(id !== ids[i]) {
if($(ids[i]).is(':visible')) {
$(ids[i]).slideUp(500);
}
}
}
return false;
});
});
};
First, I get the ID attribute of each panel by reading the value of the href attribute of each tab.
Then I add this value to the ids array, which will be used later. When a user clicks on a tab, the corresponding hidden
panel is showed thanks to the slideDown() method. In the meantime, I loop through the ids array and check
whether there are other panels (not the current one) that are in a visible state. If so, I hide them through the slideUp()
method. This action occurs on each tab, which has the form <a href="#panel"></a>.