скрыть, развернуть таб по клику
Хочу понять и научиться:
1. Как тут можно сделать так что бы #main прятался когда идет повторный клик на ту же ссылку, но при этом #main прятался а потом снова разворачивался когда второй клик на другую ссылку. <ul class="tabse" > <li class="d1" ><a href="#" >первый</a></li> <li class="d2" ><a href="#" >второй</a></li> </ul> <div id="main"> <div class="d1"> <p>текст1</p> </div> <div class="d2"> <p>текст2</p> </div> </div> $(document).ready(function() { $('div.d2').hide(); $('div.d1').hide(); $('div#main').hide(); $('ul.tabse li').click(function(){ var thisClass = this.className.slice(0,2); $('div.' + thisClass).fadeOut(); $('div#main').slideUp(); $('div.d1').hide(); $('div.d2').hide(); $('ul.tabse li').removeClass('tab-curre'); $(this).addClass('tab-curre'); $('div.' + thisClass).delay(250).fadeIn(); $('div#main').delay(250).slideDown(); }); }); |
что значит "повторный"? в jquery есть dblclick то есть двойное нажатие. Насчет повтора не уверен что есть..
|
"повторный" всмысле что - заходишь видишь что все блоки скрыты, кликаешь по ссылке таба - разворачиваеться #main с блоком самого таба, кликаешь по той же ссылке таба - сворачивается #main соответственно с табом. Я так себе сейчас понял что это ближе к toogle() но он будет неправильно работать когда идет клик по соседнему табу.
Потом можно было бы поставить jquery ui там этот вопрос быстро решается через collapsible=true, но этого сейчас не хочу ибо цель не сделать и забыть, а понять что происходит т.е научиться |
ну тогда функция click.
пример: $("#tabse a").click(function(){ $("#main div[id='" +$(this).closest("li").attr("class") + "']").toggle(...); }); Вообще есть где-нить живой пример )) посмотреть чтоб? |
если нужно чтобы #main только отрывался - toogle к майну а к нужному div например opacity = 1 через .css();
|
вот пример этих табов http://dimox.name/examples/accessible-tabs-with-jquery/ - я добавил только блок #main и его развертывание, свертывание
а вот по примеру что ты бросил - что в этом коде происходит? - мне понятно что по клику на ссылке в блоке #tabse должны быть найдены все дивы в блоке #main где есть <li> содержащие "class" ? |
Да именно так, когда ты выделил блок который нужно отобразить ставишь ему свойство display:block например и затем открывешь #main
|
этот пример у меня не отработал, я не пойму как его совместить с моим кодом :(
|
Пробую так как ниже, но вопросы остались
$(document).ready(function() { $('ul.tabse li').css('cursor', 'pointer'); $('div.d2').hide(); $('div.d1').hide(); $('div#main').hide(); $('ul.tabse li').click(function(){ var thisClass = this.className.slice(0,2); if( $('ul.tabse li').hasClass('tab-curre') ) { // если клик по блоку без активного класса ? $('ul.tabse li').removeClass('tab-curre'); $('div#main').slideUp(); } else { $('div.' + thisClass).hide(); $(this).addClass('tab-curre'); $('div.' + thisClass).fadeIn(); $('div#main').slideDown(); } }); }); хочу реализовать переключение между открытыми блоками, думалось проверять видимость блока в начале, - если есть тогда новый код, а если нет тогда код выше? правильно ли? |
<ul class="tabse" > <li class="d1" ><a href="#" >первый</a></li> <li class="d2" ><a href="#" >второй</a></li> </ul> <div id="main"> <div class="sld"> <p>текст1</p> </div> <div class="sld"> <p>текст2</p> </div> </div> $('.sld').click(function(){ $(this).slideToggle(); }) Вот и все! :) а если нужно, что бы открытый закрывался, то вначале закрой все, а нужный разверни: $('.sld').click(function(){ $('.sld').hide(); $(this).slideToggle(); }) |
slideToggle(); - почти то же самое но все же :)
Вот и все! :) - нет не все, потому что смущает два номера: 1. Класс в <li> должен совпадать с названием блока таба, ибо не сработает :) 2. Осталось сделать переход к новому табу без сворачивания #main я попробовал скрыть в диве #main все блоки которые не попадают в условие - $('ul.tabse li').click(function(){ var thisClass = this.className.slice(0,2); if( $('ul.tabse li').hasClass('tab-curre') ) { $('ul.tabse li').removeClass('tab-curre'); $('div.' + thisClass).fadeOut(); $('div#ololo').slideToggle(); } else { $('div#main div:not(.' + thisClass + ')' ).hide(); $(this).addClass('tab-curre'); $('div.' + thisClass).fadeIn(); $('div#ololo').slideToggle(); } }); похоже на правду наверно. Последнее что нужно допереть как сделать - при клике на не нажатую ранее ссылку(таб) оставить #main развернутым и отобразить блок не нажатого таба. Или свернуть #main затем снова развернуть и показать новый блок таба. |
вроде бы и все хорошо - по клику разворачивается и меняется контент, но одна мысль мне не дает покоя. Как же отследить повторный клик на активном табе что бы свернуть его когда пользователю это будет нужно ?..
|
У меня получилось этого добиться добавляя "active" к классу самих блоков таба.
$(document).ready(function() { $('ul.tabse li').css('cursor', 'pointer'); $('div.d2').hide(); $('div.d1').hide(); $('div#ololo').hide(); $('ul.tabse li').click(function() { var thisClass = this.className.slice(0,2); if($('ul.tabse li').hasClass('tab-curre')) { if($('div#ololo div.' + thisClass).hasClass('active')) { $('div#ololo div.' + thisClass ).fadeOut(); $('ul.tabse li').removeClass('tab-curre'); $('div#ololo div.' + thisClass).removeClass('active'); $('div#ololo').slideUp(); } else { $('div#ololo div:not(.' + thisClass + ')' ).removeClass('active'); $('div#ololo div.' + thisClass).addClass('active'); $('ul.tabse li').removeClass('tab-curre'); $(this).addClass('tab-curre'); $('div.' + thisClass).fadeIn(); $('div#ololo div:not(.' + thisClass + ')' ).hide(); $('div#ololo').fadeIn(function () { $(this).toggle(); $(this).show(350); }); } } else { $('div#ololo div.' + thisClass).addClass('active'); $(this).addClass('tab-curre'); $('div.' + thisClass).fadeIn(); $('div#ololo').slideDown(); } }); }); Однако потом поговорил с товарищем который что то понимает в этом - он мне по первой показал код в половину меньше этого, ругнулся мол "учи матчасть" и бросил замечание о том что у меня html не валидный. |
Часовой пояс GMT +3, время: 09:21. |