11486 sujets

JavaScript, DOM et API Web HTML5

Bonjour, pour faire simple j'ai crée une page avec un design rudimentaire pour vous montrer ce qui cloche : http://jean-zay.ovh.org/test/index.html.
J'ai deux boutons, je veux faire deux sliding différents et j'arrive pas a faire marcher les deux.
Sois les deux s'ouvre en même temps soit juste le premier.
Le code html :
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/slider.js"></script>
</head>
<body>
<div id="menu1"><img src="image/bouton.jpg" width="184" height="32"class="menu_class"  /></div>;
	<div id="onglet">
	<ul class="the_menu">
		<li><a href="#">blabla</a></li>
		<li><a href="#">blabla</a></li>
		<li><a href="#">blablabla</a></li>
		<li><a href="#">blabla</a></li>
		<li><a href="#">blabla</a></li>
		<li><a href="#">blabla</a></li>
		<li><a href="#">blablabalbalala</a></li>	
	</ul>
</div>
	<div id="menu2"><img src="image/bouton.jpg" width="184" height="32" class="menu1_class" /></div>;
	<div id="onglet2">
	<ul class="the_menu1">
		<li><a href="#">DERMOLIFT</a></li>
		<li><a href="#">SKIN LIFT</a></li>
		<li><a href="#">FACIAL SYSTEM PLUS</a></li>
		<li><a href="#">AFG 300</a></li>
		<li><a href="#">BS 200</a></li>
		<li><a href="#">AFS 100</a></li>
		<li><a href="#">THERMOFACIAL</a></li>
	</ul>
	</div>
</body>
</html>

Le css :
#menu1{
position:absolute;
top:50px;
left:50px;
z-index:2;
height:30px;
width:236px;
}
#menu2{
position:absolute;
top:100px;
left:50px;
z-index:2;
height:30px;
width:236px;
}


ul, li {
margin:0;
padding:0;
list-style:none;

} 
menu_class {
border: 1px solid #342b23;
left:400px;
}
.the_menu {
left:200px;
float: left;
width: 324px;
background-color: #1b1510;
border: 1px solid #342b23;
display: none;;
}
.the_menu li {
background-color: #302f2f;
}
 
.the_menu li a {
color:#FFFFFF;
text-decoration:none;
padding:10px;
display:block;
}
 
.the_menu li a:hover {
padding:10px;
font-weight:bold;
color: #F00880;
}
#onglet {
	position: absolute;
	height:500px;
	width:300px;
	left:235px;
	top:35px;
	z-index:3;
}
#onglet2 {
	position: absolute;
	height:500px;
	width:300px;
	left:235px;
	top:100px;
	z-index:3;
}
menu1_class {
border: 1px solid #342b23;
left:400px;
}
.the_menu1 {
left:200px;
float: left;
width: 324px;
background-color: #1b1510;
border: 1px solid #342b23;
display: none;;
}
.the_menu1 li {
background-color: #302f2f;
}
 
.the_menu1 li a {
color:#FFFFFF;
text-decoration:none;
padding:10px;
display:block;
}
 
.the_menu1 li a:hover {
padding:10px;
font-weight:bold;
color: #F00880;
}


le javascript

$(document).ready(function () {
$('img.menu_class').click(function () {
$('ul.the_menu').slideToggle('medium');
});
});
{
$('img.menu1_class').click(function () {
$('ul.the_menu1').slideToggle('medium');
});



Ensuite je vien de me rendre compte que cela ne marche pas sous IE8 Oo,
Je réalise un sit pour un grossiste qui vend des produits beauté et il vux absolutment un menu comme sa, car dans le menu j'ai plus de 100 liens a mettre. 10 a 15 par boutons j'ai 9 boutons.
Autant dire que c'est chaud.
Ensuite petite autre question pourquoi ce rollover tout simple avec onmouseover et onmouseout ne fonctionne pas sous IE alors que sous opéra et mozilla sa marche:
<div id="menu">
	   		<table  border="0" cellpadding="0" cellspacing="0" width="937">
		  		<tr>
		   		   <td><img name="menu1" src="image/menu1.jpg" width="264" height="18" border="0" id="menu1" alt="" /></td>
			   	   <td><a href="index.html"><img name="home" src="image/menu2.jpg" width="116" height="18" border="0" id="home"alt="" onmouseover="this.src='image/menu2_roll.jpg'" onmouseout="this.src='image/menu2.jpg'"/></a></td>
				   <td><a href="produits.html"><img name="produits" src="image/menu3.jpg" width="153" height="18" border="0" id="produits" alt="" onmouseover="this.src='image/menu3_roll.jpg'" onmouseout="this.src='image/menu3.jpg'"/></a></td>
				   <td><a href="contact.php"><img name="contact" src="image/menu4.jpg" width="136" height="18" border="0" id="contact" alt="" onmouseover="this.src='image/menu4_roll.jpg'" onmouseout="this.src='image/menu4.jpg'"/></a></td>
				   <td><img name="menu5" src="image/menu5.jpg" width="268" height="18" border="0" id="menu5" alt="" /></td>
				</tr>
			</table>
		</div>

Modifié par b4rto (10 Aug 2009 - 10:57)
Ok en faite pour faire plusieur sliding j'ai trouvé ^^ j'avais fait une erreur dans le javascript:
$(document).ready(function () {
$('img.menu_class').click(function () {
$('ul.the_menu').slideToggle('medium');
});
});
$(document).ready(function () {
$('img.menu1_class').click(function () {
$('ul.the_menu1').slideToggle('medium');
});
});

Enfin la je trouve sa crado car dans le css sa fait que pour mes 9 boutons je vais faire 9 fois la manip c 'est un peu bourin au nivo du css.
Donc je sais pas trop comment faire pour faire un cas générale que l'on peut appeler, avec des fonctions?
Par contre j'arrive toujours pas a le fix pour IE7 Smiley ohwell
Est ce que sa peut venir du fait que j'ai mis un <ul> et un <div> dans mon <tr> je crois que quand on fait sa c 'est pas dans la norme W3C. Si c 'est sa IE c 'est vraiment de la mousse. Smiley biggol on le savait deja en même temps /


=edit= pas une petite réponse pour fixer tout sa pour iE le sliding menu et les rollover? Smiley bawling
Modifié par b4rto (09 Aug 2009 - 23:45)
Les rollover marche sous ie8 et le sliding apparait maintenant ^^ mais il fait n'importe quoi.
http://jean-zay.ovh.org/lolilol/index.html
Donc voila mon problème : pour le premier icone j'ai mis le sliding dans un div, pour les autre si je les met dans un div ils apparaissent pas, et sans div sous opéra et firefox c'est niquel, mais sous ie8 ils apparaissent n'importe ou. Ensuite le sit est super lent, j'ai vue sur plusieurs que les gens utiliser un preloader d'image, si vous avez des renseignement la dessus je suis preneur
Modifié par b4rto (10 Aug 2009 - 14:00)
Salut

Bon je vais essayer de t'aider car beaucoup de choses ne vont pas à commencer par le design à 1.17mo (background à 650ko, on peut mieux faire je pense).

Allons-y pour les liens de gauche. Tu fais une <table>, pourquoi pas une <ul> ? Ensuite, pourquoi des images dans chaque <td> ? Le rollover peut tout aussi bien être fait en CSS. Et dans ce cas je dirai même que c'est préférable. Donc, mettre une <ul> à laquelle tu attribues une id ("menu_onglet") et des <li>. Mettre dans chaque <li> un <a> auxquels tu attribues l'id qui correspond ("menu_onglet_jetable" par exemple) et un title. Voici à quoi pourrait ressembler "menu_onglet":
#menu_onglet {
	list-style-type: none;
	margin: 0px;
	padding: 0px;
}

#menu_onglet a {
	display: block;
	width: 236px;
	height: 30px;
	background-image: url(image/menu_onglet.jpg);
}

#menu_onglet_jetable { background-position: 0px 0px; }
#menu_onglet_epilation { background-position: 0px -30px; }
#menu_onglet_soin_visage { background-position: 0px -60px; }
/* ... */

#menu_onglet_jetable:hover { background-position: -236px 0px; }
#menu_onglet_epilation:hover { background-position: -236px -30px; }
#menu_onglet_soin_visage:hover { background-position: -236px -60px; }
/* ... */

C'est qu'on appelle une map. Une map est une image dans laquelle tu mets tout ce qui concerne une certaine entité (à la manière d'une texture). Ici, "menu_onglet.jpg" contient sur sa colonne de gauche toutes les images normales, celle de droite, tous les rollovers. De cette manière, tu charges l'image 1 seule fois et la CSS s'occupe de simuler le rollover en "bougeant" le background au survol, pas Javascript.

Continuons. Pour obtenir un comportement de sliding général sans avoir à faire 40fois la manip, mets dans chaque <li> un <div>, et dans chacun de ces <div>, une <ul>. Le tout avant le <a> et rajoute ceci à ta CSS:
#menu_onglet li {
	position: relative;
}

#menu_onglet div {
	position: absolute;
	top: 0px;
	left: 236px;
}
Aussi, pour éviter les conflits de sélection des <a>, il te faut attribuer une classe spécifique aux liens images. Mettons "menu_onglet_lien", tu dois donc juste changer:
#menu_onglet a
Par
#menu_onglet .menu_onglet_lien
Tu n'auras plus qu'à définir le comportement Javascript:

$(function() {
	$("#menu_onglet")
	.find("div").hide() // On cache les <div> contenant les <ul>
	.next().hover(function() { // hover des <a> qui sont voisins des <div>
		$(this).prev().slideDown();
	}, function() {
		$(this).prev().slideUp();
	});
});
Voici ce que tu devrais obtenir en HTML
<ul id="menu_onglet">
	<li>
		<div>
			<ul>
				<li><a href="Y">Y</a></li>
			</ul>
		</div>
		<a class="menu_onglet_lien" href="X" id="menu_onglet_X" title="description pour X"></a>
	</li>
	<li>...</li>
</ul>
Voila. Pour le reste (contrôler les toggle à répétition, le flicker sur IE etc) et bien je te laisse te renseigner parce que je ne peux pas non plus faire ton boulot Smiley cligne
Merci beaucoup Smiley biggrin , après pour la lenteur le background je vais le viré sa j'ai deja prévenu ma patrone que sa faisait trop lourd/ Après niveau design je sais pas trop par quoi el remplacer de plus léger.
Je vais test tout ce que tu ma dit demain durand ma journée de taf la c'est repos glandouille ^^ .

=edit= en faite j'ai pas put m'empecher de regarder ^^; et j'ai tester sur une page toute simple, mon probleme avec ce que tu ma donné c 'est que j'arrive pas a faire apparaitre mes logo pour menu avec le rollover, tu me dit de pas mettre de td et de faire le roll over a partir du css. Dans ce cas je vois pas ou je dois mettre les background-image.
Si j'ai bien compris le raissonnement
Sa
#menu_onglet_bronzage{ background-position: 0px 0px;} 
#menu_onglet_epilation { background-position: 0px -30px; } 
/* ... */ 
#menu_onglet_jetable:hover { background-position: -236px 0px;} 
#menu_onglet_bronzage:hover { background-position: -236px -30px;}  
/* ... */ 

ce sont les liens du sliding que tu appelle ici
<ul id="menu_onglet"> 
    <li> 
        <div> 
            <ul> 
                <li><a href="Y">Y</a></li> 
            </ul> 
        </div> 
        <a class="menu_onglet_lien" href="X" id="menu_onglet_epilation" title="description pour X"></a> 
    </li> 


Ensuite bah par rapport à mes noms de div que j'avais employée la je suis complétement paumé. Je comprend pas ce que c'est que ton menu_onglet et ton menu_onglet.jpg
Moi le div menu_onglet que j'avais crée me permetai juste de placer tout mon tableau la ou je voulais dans le cadre bleu, donc il avait pas d'image.

Et enfin cette ligne de code je la comprend pas aussi : #menu_onglet .menu_onglet_lien
sur mon test quand je laisse menu_onglet a je vois les lien que je crée en html si je le remplace cela ne fonctionne pas.
Modifié par b4rto (10 Aug 2009 - 20:23)
Je n'ai pas trop le temps de t'expliquer. Voici comment on utilise ce que j'ai nommé "maps" en CSS (paragraphe "La méthode des portes coulissantes"). Fais des recherches, et reviens vers ce qui t'as été donné plus haut car ça fonctionne très bien et répond à ton problème.

Bon courage.