11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour à toutes et à tous.

Mon titre n'étant pas très explicite, je vous explique.

J'ai trouvé un album photo simple à mettre en place mais (et oui, il y a un mais) celui ci ne me permet pas de gérer plusieurs dossiers.

Voici le script en question :

Le lien du javascript : swfobject.js

Et sur la page contenant l'album photo, j'ai
	<div id="flashcontent">Cet album photo nécessite Flash Player <a href="http://www.macromedia.com/go/getflashplayer/">Installer Flash Player.</a></div>	
	<script type="text/javascript">
	
		var fo = new SWFObject("swf/viewer.swf", "viewer", "700", "350", "8", "#ffffff");
		fo.addVariable("xmlDataPath", "xml/gallery_margat.xml");
		fo.addVariable("preloaderColor", "0x999999");		
		fo.write("flashcontent");	
	</script>	


Ce que je souhaiterai, c'est lors d'un clic sur un lien (ici, ce lien serait une image), l'album serait chargé sur la page contenant l'album donc en modifiant le xml dans le script mais je ne sais pas comment m'y prendre.

Pour le moment, le script est dans une page PHP que j'appelle sur la page ou je veux mettre l'album photo....

La page en question est la suivante Album Photo

Et donc, lors d'un clic sur une vignette, l'album passerait à l'autre album photo.

J'espère avoir été assez clair pour espérer trouver de l'aide. Ce site m'a déjà bien aidé (les menus par exemple) et je pense qu'une solution soit possible mais je ne suis pas assez doué...

Merci d'avance
Modifié par Mykekeul35 (21 Mar 2009 - 03:17)
Le script actuel définit un objet SWFObjet, lui ajoute deux variables (dont le chemin du fichier xml) et lance la fonction write de cet objet (fo.write). En recherchant cette fonction write dans le script swfobjet.js, l'on constate que celle-ci redéfinit le contenu du bloc passé en argument (identifiant "flashcontent") et lance ainsi l'album. Cette action se déroule lors du chargement de la page.

Dans ces conditions, il devrait suffire de reprendre ces actions dans une fonction newFlash() définie comme suit :
function newFlash([i]nomFicXml[/i]){
  fo=new SWFObject("swf/viewer.swf", "viewer", "700", "350", "8", "#ffffff");
  fo.addVariable("xmlDataPath", "xml/"+[i]nomFicXml[/i]);
  fo.addVariable("preloaderColor", "0x999999");		
  fo.write("flashcontent");}

Celle-ci pourrait être insérée à la suite du script précédent, après la ligne fo.write("flashcontent") et avant la fin du script.
Elle serait lancée par des liens sur chacune des photos génériques qui pourraient revêtir la forme suivante :
<a href="javascript:newFlash('[i]gallery_100ans_xml[/i]')" title="Voir l'album ...">
<img src="/images/mini/01.jpg" width="80" height="53" alt="Les 100 ans" /></a>


Autrement dit chaque lien lancerait cette nouvelle fonction avec l'argument correspondant au nom du fichier xml.

Toutes les images génériques des albums pourraient être ainsi traitées (y compris l'album initial) pour permettre de revenir à un album précedent.
Donc, si je t'ai bien suivi, il suffit que je fasse :

<a href="javascript:newFlash('gallery_100ans_xml')" title="Voir l'album ...">
<img src="/images/mini/01.jpg" width="80" height="53" alt="Les 100 ans" /></a>



<div id="flashcontent">Cet album photo nécessite Flash Player <a href="http://www.macromedia.com/go/getflashplayer/">Installer Flash Player.</a></div>	

<script type="text/javascript">

var fo = new SWFObject("swf/viewer.swf", "viewer", "700", "350", "8", "#ffffff");
fo.addVariable("xmlDataPath", "xml/gallery_margat.xml");
fo.addVariable("preloaderColor", "0x999999");		
fo.write("flashcontent");	

function newFlash(nomFicXml){
fo=new SWFObject("swf/viewer.swf", "viewer", "700", "350", "8", "#ffffff");
fo.addVariable("xmlDataPath", "xml/"+nomFicXml);
fo.addVariable("preloaderColor", "0x999999");		
fo.write("flashcontent");}

</script>	


Le test ... Négatif

cela ne fonctionne pas donc je n'ai pas du comprendre ...


Edit : En fait si, cela fonctionne ! MERCI !

C'est le gallery_100ans_xml qui posait problème. gallery_100ans.xml, ça passe mieux.

En tout cas, un grand merci à toi ! ! !

Le test ... positif
Modifié par Mykekeul35 (21 Mar 2009 - 03:18)
Effectivement, mea culpa, le nom du fichier doit figurer en entier !

Il devrait être possible maintenant de déplacer la fonction au début du script principal pour éviter ces deux écritures redondantes. Son lancement pourrait être effectué, soit comme actuellement à l'ouverture de la page, soit avec JQuery (avant les opérations sur le menu).
// On lance le flash
newFlash("xml/gallery_margat.xml");
À voir aussi, la possibilité de ne créer l'objet qu'une seule fois en sortant sa définition de la fonction avec un
var fo=new SWFObject(...);
initial. Même question pour la couleur du preloader ? Il ne resterait alors que deux lignes dans la fonction et les changements d'album seraient peut-être plus rapides...
Tu es un très bon professeur !

<div id="flashcontent">Cet album photo nécessite Flash Player <a href="http://www.macromedia.com/go/getflashplayer/">Installer Flash Player.</a></div>	
<script type="text/javascript">


// On lance le flash
newFlash("gallery_margat.xml");
// Fonction newflash pour les liens avec changement de XML. Merci Julien de Prabere
function newFlash(nomFicXml){
fo=new SWFObject("swf/viewer.swf", "viewer", "700", "350", "8", "#ffffff");
fo.addVariable("xmlDataPath", "xml/"+nomFicXml);
fo.addVariable("preloaderColor", "0x999999");		
fo.write("flashcontent");}

</script>


Un seul code et tout fonctionne à merveille.

Pour ce qui est des chargement, il faut que je réduise un peu la qualité des photos (3008*2000 px), c'est ce que me donne mon reflex. Les photos sont de moi aussi Smiley cligne

Merci encore ! Smiley biggrin