Rozbalovací menu (Accordion)

Rozbalovací menu ve stylu Akordeonu (neboli česky tahací harmoniky) je oblíbené a dá se najít v celé řadě grafických frameworků (například v jQuery UI).

Pokud ale nechcete načítat celý framework jen kvůli sbalovacímu menu, můžete si ho jednoduše napsat sami.

Stačí vytvořit seznam s odkazy a rozbalovacími panely:

<nav>
	<div id="navContainer" class="tabContainer">
		<ul>
			<li>
			<a href='' class='tabButton' data-openTab='1'>1</a>
			<div id="1">1
				<a href="" class="closeButton"> CLOSE </a>
			</div>
			</li>
			<li>
			<a href='' class='tabButton' data-openTab='2'>2</a>
			<div id="2" >2
				<a href="" class="closeButton"> CLOSE </a>
			</div>
			</li>
			<li>
			<a href='' class='tabButton' data-openTab='3'>3</a>
			<div id="3" > 3
				<a href="" class="closeButton"> CLOSE </a>
			</div>
			</li>
			<li>
			<a href='' class='tabButton' data-openTab='4'>4</a>
			<div id="4" >  4
				<a href="" class="closeButton"> CLOSE </a>
			</div>
			</li>
			<li>
			<a href='' class='tabButton' data-openTab='5'>5</a>
			<div id="5" >   5
				<a href="" class="closeButton"> CLOSE </a>
			</div>
			</li>
		</ul>
	</div>
</nav>

Pak doplnit JavaScript (nejlépe do jQuery.ready()), který bude jednotlivé panely otevírat a zavírat:

        document.menuIsOpen = false;
        $('.tabContainer div').hide();

        $('.tabButton').click(function(event) {
            var
                open = $("#" + $(this).attr('data-openTab')),
                isOpened = open.is('.opened');

            event.preventDefault();
            if (document.menuIsOpen) {
                document.menuIsOpen = false;
                $('.opened').hide("slow").removeClass('opened');
            }
            if (!isOpened) {
                document.menuIsOpen = true;
                open.addClass('opened').show("slow").css("display", "block");
            }
        });

        $('.closeButton').click(function(event) {
            event.preventDefault();
            $('.opened').hide("slow").removeClass('opened');
        });

Kód nejprve sbalí všechny panely a následně vytvoří handlery pro otevírací a zavírací (Close) odkazy. Po kliku na otevírací odkaz pak nejprve zjistí, jestli již není otevřen některý panel a pokud ano, tak ho nejprve zavře. Následně, pokud chce uživatel otevřít jiný než právě otevřený panel, tak ho otevře.

Pokud nechcete mít panely a otevírací odkazy v jednom, můžete je oddělit:

<nav>
	<div id="navContainer">
		<ul>
			<li>
			<a href='' class='tabButton' data-openTab='1'>1</a>
			</li>
			<li>
			<a href='' class='tabButton' data-openTab='2'>2</a>
			</li>
			<li>
			<a href='' class='tabButton' data-openTab='3'>3</a>
			</li>
			<li>
			<a href='' class='tabButton' data-openTab='4'>4</a>
			</li>
			<li>
			<a href='' class='tabButton' data-openTab='5'>5</a>
			</li>
		</ul>
	</div>
	<div id = "tabContainer" class="tabContainer">
		<div id="1">1
			<a href="" class="closeButton"> CLOSE </a>
		</div>
		<div id="2" >2
			<a href="" class="closeButton"> CLOSE </a>
		</div>
		<div id="3" > 3
			<a href="" class="closeButton"> CLOSE </a>
		</div>
		<div id="4" >  4
			<a href="" class="closeButton"> CLOSE </a>
		</div>
		<div id="5" >   5
			<a href="" class="closeButton"> CLOSE </a>
		</div>
	</div>
</nav>

První sekce navContainer obsahuje otevírací odkazy, zatímco druhá tabContainer obsahuje otevírané panely. Díky propojení přes id mohou být umístěny kdekoliv na stránce – např. odkazy v horním menu (toolbar) a panely v po straně (sidebar).

Můžete se podívat na ukázku spojeného a odděleného akordeonu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..