11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous Smiley smile

La situation est simple, je désire créer une galerie de photos avec JS et le tutoriel sur Alsacréations proposé par Olivier me convient parfaitement (http://www.alsacreations.com/tuto/lire/557-galerie-photo-javascript.html)

Problème : lorsque je met tout ça en place dans mon site, le click sur une image de la galerie miniature me fait effectivement apparaître la photo souhaitée en taille réelle, mais dans l'onglet actif du navigateur... !

J'ai beau regarder encore et encore le code, je ne vois pas où ça bloque... à vous de juger Smiley confus

Le fichier .html :

<span>

	<div class="ferme"></div><span class="menu">site web</span>
	
	<hr size="1px" noshade />
	
[b]	<ul class="sous-menu">
	
		<li><a href="1petit.jpg" title="1"><img src="1grand.jpg" alt="1" /></a></li>
		<li><a href="2petit.jpg" title="2"><img src="2grand.jpg" alt="2" /></a></li>
	
	</ul>[/b]

</span>

.
.
.

<div id="debut_cadre">

	<div id="affichage">[b]<img id="photo" src="1grand.jpg" alt="1" />[/b]</div>
	
	<div id="fin_cadre">
	
		<div id="afficher_commentaires"></div>
	
	</div>

</div>


Le fichier .js :

function afficher_photos ()
{
	var miniatures = document.getElementsByTagName('ul');
	var liens = miniatures.getElementsByTagName('a');
	var photo = document.getElementById('photo');
	
	for (var i=0 ; i<liens.length ; ++i)
	{
		liens[i].onclick = function ()
		{
			photo.src = this.href;
			photo.alt = this.title;
			
			return false;
		}
	}
}
window.onload = afficher_photos;


Je précise que j'ai simplifié le script donné car je n'ai pas besoin d'afficher un titre pour la photo en grand format, mais globalement c'est le même script...

Merci d'avance pour vos réponses, je commence à désespérer... Smiley decu [/i]
Modifié par Maliki (06 Jun 2009 - 13:54)
Bonjour,

Rien qui ne me saute aux yeux à la lecture du code... à part l'invalidité flagrante du code HTML, ou le fait que les URL des images soient inversés dans le code qui correspond aux vignettes (on affiche une grande image dans un lien qui conduit à la vignette? WTF?).

On peut voir la page complète?
Bonjour,

Merci d'accorder un peu de ton temps à mon problème. Smiley smile

OMFG... j'ai fait une erreur, les codes sont en effet inversés, mais j'ai fait cette erreur en remplaçant les vraies valeurs par ces "1petit" et autres "2grand" histoire de simplifier la lecture du code.

Le problème n'est donc pas là, et par ailleurs, pourrais-je juste savoir pourquoi le code n'est pas valide ? Tu parles bien des normes W3C ?

En tout cas voici la page complète, attention ça fait peur... et je n'ose pas imaginer les erreurs d'invalidité, je ne l'ai encore jamais passé au validator... Smiley sweatdrop

Le fichier .html en intégralité :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">



	<head>
	
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		
		<link rel="stylesheet" type="text/css" href="zen.css" title="Zen" media="screen" />
		
		<script type="text/javascript" src="jquery-1.3.2.js"></script>
		<script type="text/javascript" src="menu.js"></script>
		<script type="text/javascript" src="rubrique.js"></script>
		<script type="text/javascript" src="afficher_photos.js"></script>
		<script type="text/javascript" src="commentaires.js"></script>
		
		<title>Mon CV interactif</title>
	
	</head>
	
	
	
	<body>
	
		<div id="haut">
		
			<div id="logo"></div>
		
		</div>
		
		<div id="ligne"></div>
		
		<div id="accueil">
		
			<div class="menu">
			
				<div class="menu_ouverture"></div>
				
				<div class="menu_contenu">
				
					<!-- sous-menu 1 -->
					<span>
					
						<div class="ferme"></div><span class="menu">site web</span>
						
						<hr size="1px" noshade />
						
						<ul class="sous-menu">
						
							<li><a href="animxtasy.jpg" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
							<li><a href="jeyjeysheaven.jpg" title="jeyjey's heaven"><img src="jeyjeysheaven.ico" alt="jeyjey's heaven" /></a></li>
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li> <!-- Je précise que les liens google c'est uniquement pour bénéficier du style donné aux liens dans la feuille de style, ça sera remplacé bien entendu. -->
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
						
						</ul>
					
					</span>
					
					<!-- sous-menu 2 -->
					<span>
					
						<div class="ferme"></div><span class="menu">création graphique</span>
						
						<hr size="1px" noshade />
						
						<ul class="sous-menu">
						
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
						
						</ul>
					
					</span>
					
					<!-- sous-menu 3 -->
					<span>
					
						<div class="ferme"></div><span class="menu">retouche photo</span>
						
						<hr class="derniere" size="1px" noshade />
						
						<ul class="derniere">
						
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
							<li><a href="http://www.google.fr/" title="animxtasy"><img src="animxtasy.ico" alt="animxtasy" /></a></li>
						
						</ul>
					
					</span>
				
				</div>
				
				<div class="menu_fermeture"></div>
			
			</div>
			
			<div class="contenu">
			
				<div class="rubrique">
				
					<div class="titre">p o r t f o l i o</div>
					
					<div class="icones">
					
						<div class="accueil"></div>
						<div class="cv"></div>
						<div class="portfolio"></div>
						<div class="contact"></div>
					
					</div>
					
					<div class="indication">
					
						<span class="1">accueil</span>
						<span class="2">cv</span>
						<span class="3">portfolio</span>
						<span class="4">contact</span>
					
					</div>
				
				</div>
				
				<div id="debut_cadre">
				
					<div id="affichage"><img id="photo" src="animxtasy.jpg" alt="animxtasy" /></div>
					
					<div id="fin_cadre">
					
						<div id="afficher_commentaires"></div>
					
					</div>
				
				</div>
				
				<div class="commentaires">
				
					<div id="cacher_commentaires"></div>
				
				</div>
			
			</div>
		
		</div>
		
		<div id="bande-verticale"></div>
	
	</body>



</html>


Le fichier .css en intégralité (au cas où...) :

html {
font-size: 100%
}

	body {
	margin: 0;
	padding: 0;
	background-color: #ccc;
	font-family: Arial, Helvetica, sans-serif;
	font-size: .8em;
	}
	
		div#haut {
		height: 195px;
		background-color: #000;
		border-style: solid;
		border-width: 0 0 5px 0;
		border-color: #69c;
		}
		
		div#logo {
		height: 50px;
		width: 200px;
		position: absolute;
		left: 50%;
		margin-top: 145px;
		margin-left: -100px;
		background: url(logo.png) no-repeat;
		}
		
		div#ligne {
		height: 50px;
		background: url(ligne.png) repeat-x;
		}
		
		div#accueil {
		width: 900px;
		position : absolute;
		top: 252px;
		margin-left: 50%;
		left: -450px;
		}
		
			div.menu {
			width: 200px;
			float: left;
			margin: 52px 0 0 0;
			font-weight: bold;
			font-variant: small-caps;
			}
			
				div.menu_ouverture {
				height: 25px;
				background: url(menu_ouverture.png) no-repeat;
				}
				
				div.menu_contenu {
				margin: 0;
				padding: 0 10px;
				background: url(menu_contenu.png) repeat-y;
				}
				
					div.menu_contenu ul {
					margin: 0 0 6px 0;
					padding: 0;
					list-style-type: none;
					text-align: center;
					}
					
					div.menu_contenu ul.derniere {
					margin: 6px 0 0 0;
					}
					
					div.menu_contenu li {
					display: inline;
					margin: 0 2px 0 0;
					}
					
					div.menu_contenu a {
					color: #000;
					text-decoration: none;
					cursor: default;
					}
					
					div.menu_contenu a:hover {
					color: #fff;
					}
				
				div.menu_fermeture {
				height: 25px;
				background: url(menu_fermeture.png) no-repeat;
				}
			
			div.contenu {
			width: 700px;
			float: right;
			}
			
				div.rubrique {
				height: 75px;
				width: 700px;
				background: url(rubrique.png) no-repeat;
				}
				
					div.titre {
					height: 24px;
					width: 320px;
					float: left;
					margin: 25px 0 0 30px;
					color: #fff;
					font-weight: bold;
					font-variant: small-caps;
					}
					
					div.icones {
					height: 25px;
					width: 175px;
					float: right;
					margin: 5px 5px 0 0;
					}
					
					div.indication {
					height: 25px;
					width: 130px;
					float: right;
					margin: 40px -25px 0 0;
					color: #c96;
					text-align: center;
					font-weight: bold;
					font-variant: small-caps;
					}
					
					div.indication span {
					display: none;
					}
				
				div#debut_cadre {
				width: 500px;
				margin: 25px 0 0 25px;
				background: url(debut_cadre.png) no-repeat;
				}
				
					div#affichage {
					width: 448px;
					margin-left: 50px;
					padding: 60px 0 0 0;
					border-style: solid;
					border-width: 0 2px 0 0;
					border-color: #333;
					}
					
					div#fin_cadre {
					height: 52px;
					width: 500px;
					background: url(fin_cadre.png) no-repeat;
					}
					
						div#afficher_commentaires {
						height: 52px;
						width: 52px;
						float: right;
						background: url(afficher_commentaires.png) no-repeat;
						}
						
						div#afficher_commentaires:hover {
						background: url(afficher_commentaires-hover.png) no-repeat;
						}
				
				div.commentaires {
				height: 200px;
				width: 200px;
				position: relative;
				top: -200px;
				left: 325px;
				background: url(commentaires.png) no-repeat;
				display: none;
				}
				
					div#cacher_commentaires {
					height: 52px;
					width: 52px;
					float: left;
					background: url(cacher_commentaires.png) no-repeat;
					}
					
					div#cacher_commentaires:hover {
					background: url(cacher_commentaires-hover.png) no-repeat;
					}
		
		div#bande-verticale {
		height: 900px;
		width: 600px;
		margin: 0 auto 50px;
		background: url(setoan.jpg) left bottom no-repeat;
		background-color: #fff;
		border: 2px solid #000;
		z-index: -1;
		}

hr {
margin: 6px 0;
color: #fff;
}

hr.derniere {
margin: 6px 0 0 0;
}

p {
text-align: justify;
margin-top: 0;
margin-bottom: 0;
}

.ferme {
height: 16px;
width: 16px;
float: right;
background: url(ferme.png) no-repeat;
}

.ouvert {
height: 16px;
width: 16px;
float: right;
background: url(ouvert.png) no-repeat;
}

.accueil {
height: 25px;
width: 25px;
position: relative;
right: 105px;
background: url(accueil.png) no-repeat;
}

.cv {
height: 25px;
width: 25px;
position: relative;
right: 70px;
top: -25px;
background: url(cv.png) no-repeat;
}

.portfolio {
height: 25px;
width: 25px;
position: relative;
right: 35px;
top: -50px;
background: url(portfolio.png) no-repeat;
}

.contact {
height: 25px;
width: 25px;
position: relative;
top: -75px;
background: url(contact.png) no-repeat;
}


Quant au script, c'est le même qu'au-dessus ! Smiley biggrin

Voilà tout y est, pardon pour la longueur du post... Smiley sweatdrop
Bon alors deux petites choses:

1. Quand je dis «page complète», ça signifie en clair «page en ligne que je peux consulter directement sans effort et explorer avec les outils pour développeur de mon navigateur, tels que Firebug, Firefly, Web Inspector ou IE Developer Tools». Oui, je suis flemmard, et j'assume (c'est pas moi qui demande de l'aide Smiley lol ). (Il y a aussi le fait qu'une page peut faire appel à des ressources externes, images ou scripts JS par exemple, qui peuvent jouer un rôle dans le problème.)

2. C'est bien tenté de demander «où est-ce qu'il y a un problème de validité?» et de préciser juste derrière que tu n'as jamais passé cette page au validateur. Euh comment dire... si tu n'as pas encore le réflexe de vérifier la validité de tes pages a) à intervalles réguliers et b) à chaque fois que tu as une erreur ou un comportement inattendu, alors il est temps de prendre ce réflexe. Hop: http://validator.w3.org
Mais plus concrètement je pensais au fait d'englober un certain nombre d'éléments de type bloc dans un élément SPAN (de type en-ligne). C'est juste pas possible, dans le meilleur des cas ça sera ignoré et dans le pire ça peut mettre la zone.
J'avais le même problème que toi avant...J'avais mis le code Javascript à l'intérieur de ma page "photographie.html" au début au lieu de créer un fichier externe "script.js" comme demandé dans le tuto, et ça marchait pas...finalement j'ai fais le fichier externe et ça à fonctionné.

Si jamais tu n'as toujours pas réglé ton problème depuis le 9 juin j'espère que ça pourra t'aider xD Désolée j'suis pas très calée en Javascript encore j'apprends ça en cours depuis peu...
Quelque chose me dit que l'avertissement sur les «bases de JavaScript» fait peur à pas mal de monde. Il y a aussi le fait que le tutoriel d'Olivier est mieux référencé, et dispose d'une description (meta description) efficace depuis peu. Enfin, les visiteurs qui tombent sur ce tutoriel depuis Google sont probablement à la recherche d'une solution rapide et lisent en diagonale le texte, zappant ainsi l'avertissement placé en introduction.

Je dis tout ça un peu au pif mais je pense être dans le vrai. Smiley smile
Florent V. a écrit :
Quelque chose me dit que l'avertissement sur les «bases de JavaScript» fait peur à pas mal de monde. Il y a aussi le fait que le tutoriel d'Olivier est mieux référencé, et dispose d'une description (meta description) efficace depuis peu. Enfin, les visiteurs qui tombent sur ce tutoriel depuis Google sont probablement à la recherche d'une solution rapide et lisent en diagonale le texte, zappant ainsi l'avertissement placé en introduction.

Je dis tout ça un peu au pif mais je pense être dans le vrai. Smiley smile

Ça se tient Smiley smile