Я посмотрел на вашу страницу и быстро попытался разобраться с некоторыми ошибочными действиями.
С одной стороны, похоже, что вы обрабатывали случай, когда пользователь нажимает навигационную ссылкуво второй раз, закрыв div содержимого, вы не работали, если пользователь нажимает навигационную ссылку в третий раз.Как пользователь, я ожидал бы, что div будет открываться или закрываться независимо от того, сколько раз я нажал на ссылку.
Чтобы исправить это, я добавил проверку того, является ли целевой элемент или нетвиден, и я использую это, чтобы решить, открывать или закрывать содержимое.Я также добавил вызовы в функции show и hide для целевого и сокращенного элементов, чтобы гарантировать, что проверка того, является ли элемент видимым, даст ожидаемый результат.
Мой исправленный код приведен ниже.Вполне возможно, что логика для некоторых случаев может быть объединена для упрощения кода.
// navigation trigger
$('#navbar a').each(function() {
var $this = $(this);
var target = $this.attr('href').split('#')[1];
var $contentContainer = $('#contentContainer');
var oldPos = 0;
var newPos = 200;
// add a click handler to each A tag
$this.click(function() {
// if the container isn't open, then open it
if ($contentContainer.css('height') === '') {
// trigger the animation
$contentContainer.animate({
height: newPos
}, "slow", function() {
// fade in the content
$('#' + target).show().fadeIn();
});
} else {
if (curLoaded == target) {
if ($('#' + target).is(':visible')) {
$contentContainer.animate({
height: oldPos
}, "slow", function() {
$('#' + curLoaded).hide();
$('#content div').hide();
});
} else {
$contentContainer.animate({
height: newPos
}, "slow", function() {
// fade in the content
$('#' + target).show().fadeIn();
});
}
} else {
$contentContainer.animate({
height: oldPos
}, "slow", function() {
$('#' + curLoaded).hide();
$('#content div').hide();
$contentContainer.animate({
height: newPos
}, "slow", function() {
$('#' + target).fadeIn();
});
});
}
}
curLoaded = target;
return false;
});
});