11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

j'ai repris le script d'alsacreations permettant de réaliser un menu vertical en accordéon via la librairie Jquery.

Je l'ai adapté à mon site mais je bloque sur un point que je n'arrive pas à résoudre.

Tout d'abord, voici mon code :

CSS:

#navigation {
margin: 0;
padding: 0;
list-style: none;
color: #fff;
width: 156px;
font: 11px Arial, Helvetica, sans-serif;
}
#navigation a, #navigation span {
display: block;
padding: 6px 15px;
color: #0a608d;
text-decoration: none;
line-height:20px;
background: #fff url(../images/menugauchebordure.jpg) left bottom no-repeat;
font-weight:bold;
outline: none;
}
#navigation .toggleSubMenu a, #navigation .toggleSubMenu span {
background-image: url(../images/menugauchebordure.jpg);
outline: none;
}
#navigation .open a, #navigation .open span {
background-image: url(../images/menugauchebordure.jpg);
color:#d37b2b;
outline: none;
}
#navigation a:hover, #navigation a:focus, #navigation a:active {
text-decoration: none;
color:#d37b2b;
outline: none;
}
#navigation .subMenu {
font-size:11px;
margin: 0;
padding: 0;
color: #808283;
list-style: none;
font-weight:normal;
}
#navigation ul.subMenu a {
background: none;
padding: 1px 10px;
color: #808283;
list-style: none;
font-weight:normal;
}
#navigation ul.subMenu a:hover {
color:#d37b2b;
}
#navigation .open_at_load {
font-size:11px;
margin: 0;
padding: 0;
color: #808283;
list-style: none;
font-weight:normal;
}
#navigation ul.open_at_load a {
background: none;
padding: 1px 10px;
color: #808283;
list-style: none;
font-weight:normal;
}
#navigation ul.open_at_load a:hover {
color:#d37b2b;
}

LE Javascript :

<script type="text/javascript" src="scripts/jquery-1.3.1.js"></script>
<script type="text/javascript">

<!--
$(document).ready( function () {
// On cache les sous-menus
// sauf celui qui porte la classe "open_at_load" :
$("ul.subMenu:not('.open_at_load')").hide();

// On selectionne tous les items de liste portant la classe "toggleSubMenu"

// et on remplace l'element span qu'ils contiennent par un lien :
$("li.toggleSubMenu span").each( function () {
// On stocke le contenu du span :
var TexteSpan = $(this).text();
$(this).replaceWith('<a href="">' + TexteSpan + '</a>') ;
} ) ;

// et on remplace l'element span qu'ils contiennent par un lien :
$("li.toggleSubMenu span:eq(0)").focus();

// On modifie l'evenement "click" sur les liens dans les items de liste
// qui portent la classe "toggleSubMenu" :
$("li.toggleSubMenu > a").click( function () {
// Si le sous-menu etait deja ouvert, on le referme :
if ($(this).next("ul.subMenu:visible").length != 0) {
$(this).next("ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") } );
}
// Si le sous-menu est cache, on ferme les autres et on l'affiche :
else {
$("ul.subMenu").slideUp("normal", function () { $(this).parent().removeClass("open") } );
$(this).next("ul.subMenu").slideDown("normal", function () { $(this).parent().addClass("open") } );
}
// Si le sous-menu etait deja ouvert, on le referme :
if ($(this).next("ul.open_at_load:visible").length != 0) {
$(this).next("ul.open_at_load").slideUp("normal", function () {$(this).parent().removeClass("open")} );
}
// Si le sous-menu est cache, on ferme les autres et on l'affiche :
else {
$("ul.open_at_load").slideUp("normal", function () { $(this).parent().removeClass("open") } );
$(this).next("ul.open_at_load").slideDown("normal", function () { $(this).parent().addClass("open") } );
}
// On empeche le navigateur de suivre le lien :
return false;
});

} ) ;
// -->
</script>

Le code Html :

<ul id="navigation">
<li class="toggleSubMenu"><span>IDI - EM</span>
<ul class="open_at_load">
<li><a href="test.php" title="">> History</a></li>
<li><a href="test.php" title="">> Presentation</a></li>
<li><a href="test.php" title="">> Partners</a></li>
<div style="background-image:url(images/menugauchebordure1.jpg); background-repeat:no-repeat; height:2px;"></div>
</ul>
</li>
<li class="toggleSubMenu"><span>INVESTMENT</span>
<ul class="subMenu">
<li><a href="" title="">> How we invest</a></li>
<div style="background-image:url(images/menugauchebordure1.jpg); background-repeat:no-repeat; height:2px;"></div>
</ul>
</li>
<li class="toggleSubMenu"><span>PORTFOLIO</span>
<ul class="subMenu">
<li><a href="" title="">> Sector</a></li>
<li><a href="" title="">> Geographies</a></li>
<div style="background-image:url(images/menugauchebordure1.jpg); background-repeat:no-repeat; height:2px;"></div>
</ul>
</li>
<li class="toggleSubMenu"><span>TEAM</span>
<ul class="subMenu">
<li><a href="" title="">> Management Team</a></li>
<li><a href="" title="">> Supervisory Board</a></li>
<div style="background-image:url(images/menugauchebordure1.jpg); background-repeat:no-repeat; height:2px;"></div>
</ul>
</li>
<li class="toggleSubMenu"><span>NEWS</span>
<ul class="subMenu">
<li><a href="" title="">> Articles News</a></li>
<li><a href="" title="">> Press Releases</a></li>
<div style="background-image:url(images/menugauchebordure1.jpg); background-repeat:no-repeat; height:2px;"></div>
</ul>
</li>
<li class="toggleSubMenu"><span>CONTACT</span>
<ul class="subMenu">
<li><a href="" title="">> Our Adress</a></li>
<li><a href="" title="">> By Email</a></li>
<div style="background-image:url(images/menugauchebordure1.jpg); background-repeat:no-repeat; height:2px;"></div>
</ul>
</li>
</ul>

Lorsque l'utilisateur clique sur un des sous menu, la nouvelle page s'ouvre en gardant le menu vertical ouvert sur le bon thème (grâce à la classe open_at_load).

Mais j'aimerais que le thème soit dans la couleur comme si le curseur était dessus, ou lorsque l'onclique dessus (classe #navigation a:hover, #navigation a:focus, #navigation a:active).

Il me suffirait de positionner le focus sur le thème lorsque celui-ci est choisi à ravers le menu et une fois la cible atteinte.

Malheureusement, je n'arrive pas à placer le focus sur le thème choisi (pour activer la classe #navigation a:hover, #navigation a:focus, #navigation a:active) lors du chargement de la page choisie.

Merci pour vos réponses !

Smiley sweatdrop