Здесь:
демо с комментариями
Здесь мы используем .index()
числонажатие li
- чтобы открыть вкладку, чей :eq()
равен этому .index()
.
Посмотрите на эти таблицы: До у вас было это:
li index ---> .slide index
_____________________________________
Action | 0 ---> Action | 0
Comedy | 1 ---> Comedy | 1
Drama | 2 ---> Drama | 2
Docume. | 3 ---> Docume.| 3
И каждый li
красиво открывал свою соответствующую вкладку .slide
.
Но чем вы решили добавить элемент .all
, который откроет ВСЕ ваши вкладки, Но теперь у вас есть это:
li index ---> .slide index
_____________________________________
All | 0 (OPEN ALL)
Action | 1 ---> Action | 0
Comedy | 2 ---> Comedy | 1
Drama | 3 ---> Drama | 2
Docume. | 4 ---> Docume.| 3
Как вы можете видеть .all
не имеет своей конкретной вкладки "брат"открыть.Он просто должен открыть все вкладки!
Но, добавив этот «дополнительный» элемент li
, вы «переместили» порядковые номера других li
элементов на 1 вверх.
Теперь нажмите li
Drama , теперь с индексом 3 откроется вкладка с таким же индексом.Но это ТАБ, содержащий документальные фильмы!так как он по-прежнему имеет индекс 3 !
Чтобы исправить эту новую проблему, вам нужно искать вкладку, которая имеет ЭТОТ индекс, но -1.
( Drama index (3) -1 = открыть вкладка Drama index (2))
$('ul.nav li').click(function() {
var i = $(this).index()-1;
$('.slide:eq('+i+')').fadeIn(400);
});
Имея это в виду, вам просто нужно .fadeOut()
все ранее открытые вкладки, используяJQuery :visible
селектор.Пример:
$('.slide:visible').fadeOut(400);
Это предотвратит взаимодействие вашего скрипта со всеми другими .slide
.
А вот ваш скрипт:
$('.slide').css({position:'relative',display:'block'});
$('ul.nav li').click(function() {
$(this).addClass('btnSelect').siblings().removeClass('btnSelect');
if( $(this).hasClass('all') ){
$('.slide:visible').fadeOut(400,function(){
$('.slide').fadeIn(400);
$('.grid ul li:nth-child(1)').show();
});
return;
}
var i = $(this).index()-1;
$('.slide:visible').fadeOut(400,function(){
$('.slide:eq('+i+')').fadeIn(400);
$('.grid ul li:nth-child(1)').hide();
});
});
Вы также можете использовать:$('.slide').eq(i).fadeIn(400);
выглядит красивее!:)