Bonjour aux Alsanautes,
j'ai façonné un diaporama qui se fonde juste sur une image dite générique, évolutive image_generique et son clone image_clone.
Un double effet de fondu anime la transition entre 2 images.
Ni liste ordonnée, ni écriture détaillée de toutes les images dans le html : cela soulage la maintenance et la mise à jour du diaporama, ou des diaporamas s'il y en avait de nombreux !
Voici le code la pageWeb entière ; il vous suffirait en local de copier-coller le code et de l'enregistrer avec votre éditeur (le Bloc-notes Windows suffira, avec le codage UTF-8) diaprama.htm, de créer votre propre dossier img où dormiraient 11 images .jpg, et d'y placer les background-image suivants :
flechesens.png : background-image de l'id="sens"
pause.jpg : background-image alternatif de l'id="playplause"
play.jpg : background-image alternatif de l'id="playplause"
Remarque : toutes les images du diaporama sont renommées i suivi d'un chiffre : i1.jpg i2.jpg i3.jpg ... et de même extension .jpg (i comme image, non le i en js comme indéfini)
L'astuce, ou la stratégie des méthodes javascript sera de faire évoluer ce Chiffre et son Clone
Une question demeure : comment considérer qu'une image par exemple .png (qui s'est glissée subrepticement dans le dossier-source des images) puisse être lue quand même par mon js ?
Si d'aventure vous aviez une idée ...
Modifié par senteur_honrable (02 Feb 2015 - 20:30)
j'ai façonné un diaporama qui se fonde juste sur une image dite générique, évolutive image_generique et son clone image_clone.
Un double effet de fondu anime la transition entre 2 images.
Ni liste ordonnée, ni écriture détaillée de toutes les images dans le html : cela soulage la maintenance et la mise à jour du diaporama, ou des diaporamas s'il y en avait de nombreux !
Voici le code la pageWeb entière ; il vous suffirait en local de copier-coller le code et de l'enregistrer avec votre éditeur (le Bloc-notes Windows suffira, avec le codage UTF-8) diaprama.htm, de créer votre propre dossier img où dormiraient 11 images .jpg, et d'y placer les background-image suivants :
flechesens.png : background-image de l'id="sens"
pause.jpg : background-image alternatif de l'id="playplause"
play.jpg : background-image alternatif de l'id="playplause"
Remarque : toutes les images du diaporama sont renommées i suivi d'un chiffre : i1.jpg i2.jpg i3.jpg ... et de même extension .jpg (i comme image, non le i en js comme indéfini)
L'astuce, ou la stratégie des méthodes javascript sera de faire évoluer ce Chiffre et son Clone
Une question demeure : comment considérer qu'une image par exemple .png (qui s'est glissée subrepticement dans le dossier-source des images) puisse être lue quand même par mon js ?
<!DOCTYPE html>
<html lang="fr">
<head>
<title>Diaporama css3 et js</title>
<meta charset="utf-8" />
<meta name="description" content="Diaporama par javascript et css3 ; dynamique et interactif, automatique ou manuel." />
<style type="text/css">
body
{font-family:verdana,arial;font-size:1em}
input
{display:inline-block;position:relative;margin:0;padding:0;border:1px solid #000;outline:none 0;text-align:center;cursor:pointer}
h1
{margin:0;text-align:left;font-weight:normal;color:#555;font-family:verdana,arial}
h2
{margin:0 0 10px 0;text-align:left;font-weight:normal;color:#555;font-family:verdana,arial}
#global
{display:block;position:relative;width:612px;left:50%;padding:10px;margin-left:-316px;text-align:center}
#conteneur
{z-index:1;display:block;position:relative;width:610px;height:430px;margin-left:-1px;margin-bottom:30px;cursor:pointer;border:1px solid #fff}
/* === Les img du conteneur y seront parfaitement centrees === */
#conteneur img
{z-index:1;display:inline-block;position:absolute;margin:auto;top:0;bottom:0;left:0;right:0;padding:0px;max-height:100%;max-width:100%}
#commandes1
{display:block;position:relative;width:610px;text-align:center;margin-bottom:5px;line-height:2.4em}
#playpause
{width:27px;height:27px;box-shadow:3px 3px 6px #999;}
#sens
{width:27px;height:27px;;margin:0 0 0 4px}
#conteneur_indicateur
{display:inline-block;position:relative;width:10px;height:27px;background:#ffff;margin-right:4px;top:2px}
/* === class affectees aux commandes manuelles === */
.play
{background-image:url(img/play.jpg)}
.pause
{background-image:url(img/pause.jpg)}
.sens_avant
{background-image:url(img/fleche_sens.png);box-shadow:3px 3px 6px #999;transform:rotate(0deg);transition:all linear 0.5s}
.sens_arriere
{background-image:url(img/fleche_sens.png);box-shadow:-3px -3px 6px #999;transform:rotate(-180deg);transition:all linear 0.5s}
/* === 4 class appliques a image_generique et image_clone === */
.image_00
{box-shadow:6px 6px 8px #999;opacity:0}
.image_0
{box-shadow:6px 6px 8px #999;opacity:0;transition:opacity 1.5s linear}
.image_11
{box-shadow:6px 6px 8px #999;opacity:1}
.image_1
{box-shadow:6px 6px 8px #999;opacity:1;transition:opacity 1.5s linear}
/* === class diverses === */
.chiffre_courant
{width:30px;background-color:#ffff96;font-weight:bold;cursor:default;top:-7px;box-shadow:3px 3px 6px #999;margin-right:0}
.indicateur_galopant
{display:inline-block;position:absolute;width:8px;height:0;left:0;bottom:0;background-color:#ffff96;border:1px solid #000;box-shadow:3px 3px 6px #999;margin-right:4px;transition:height linear 6s}
.indicateur_statique
{display:inline-block;position:absolute;width:8px;height:25px;left:0;bottom:0;background-color:#ffff96;border:1px solid #000;box-shadow:3px 3px 6px #999;margin-right:4px}
</style>
</head>
<body>
<div id="global">
<div id="conteneur">
<img name="image_clone" id="image_clone" class="image_0" src="img/i9.jpg" alt="" /><! -- Les 2 images en position:absolute se superposent, au centre du conteneur -- >
<img name="image_generique" id="image_generique" class="image_1" src="img/i1.jpg" alt="" />
</div>
<div id="commandes1">
<input id="playpause" name="playpause" class="pause" type="button" value="" title="play/pause" /><input id="sens" name="sens" class="sens_avant" type="button" value="" title="inverser le sens de lecture" />
<span style="position:absolute;right:0">
<span id="conteneur_indicateur"><span id="indicateur_temporel" class="indicateur_statique"></span></span><input id="chiffre_courant" name="chiffre_courant" type="button" class="chiffre_courant" value="01" title="sur 11 images, celle en cours" />
</span>
</div>
<span style="display:block;text-align:left;padding:6px 12px 18px 6px;border:1px solid #ccc;font-size:0.8em">
<h1>
Diaporama
</h1>
<h2>
par javascript et css3
</h2>
• Le diaporama peut recevoir des images de dimensions différentes (hauteur et largeur) ; ces images seront toujours centrées (haut=bas, gauche=droite).
<br />
• La stratégie du javascript est fondée sur une image dite générique, évolutive.
<br />
• Grâce à css3 et une astuce de clonage de l'image_generique, un double effet de fondu s'exprime sur les images alternées.
<br />
• Le javascript se substitue intégralement à une liste ordonnée et à l'intégration html de toutes les images du diaporama !
<br />
• Création : Jean Sentrais, artiste peintre - Chinon FR-37500, edit 17 décembre 2014.
<br />
<br />
Note : le diaporama ne pourra considérer des images qu'à la même extension : .png ou .jpg ou .gif
</span>
</div>
<script type="text/javascript">
function Bid(id) //Juste pour un raccourci d'ecriture.
{
return document.getElementById(id);
}
var conteneur=Bid("conteneur"); //Element a "fonctionner".
var playpause=Bid("playpause");
var sens=Bid("sens");
Chiffre=1; //La premiere image du diaporama sera i1.jpg
NombreImages=11; //Modifier selon votre nombre d'images disponibles ; ici de 1 a 11, et pourquoi pas 53 si vous aviez i1.jpg i2.jpg i.jpg i4.jpg i5.jpg ... i53.jpg
mon_interval=6000; //Modifier selon votre preference du temps de pause sur image : 6000 = 6 secondes.
function GeneriqueEtClone()
{
document.image_generique.src="img/i"+Chiffre+".jpg"; //Vous pouvez modifier name, dossier-source ou extension selon vos propres donnees.
document.image_clone.src="img/i"+Clone+".jpg"; //Vous pouvez modifier ...
if(Chiffre<10)
{
chiffre_courant.value="0"+Chiffre+"";
}
else if(Chiffre>=10)
{
chiffre_courant.value=""+Chiffre+"";
}
image_generique.className='image_00'; //Affecter une nouvelle class a name="image_generique"
image_clone.className='image_11'; //Affecter une nouvelle class ...
setTimeout(function(){image_generique.className='image_1';image_clone.className='image_0'},30);
//Le setTimeout, ou delai, est determinant : pas de setTimeout = pas d'application de la class ...
//car c'est utile de permettre a l'ordi "d'imprimer" les ordres precedents !
}
/* --- Rien ne peut etre modifie ou parametre ci-apres --- */
function EnAvant()
{
Chiffre=Chiffre+1;
Clone=Chiffre-1;
if(Chiffre>NombreImages)
{
Chiffre=1;
}
GeneriqueEtClone(); //Affecter le nouveau Chiffre lors du changement d'images, generique et clone.
if(playpause.className=='play' || !playpause.className)
{
IndicateurGalopant(); //Montrer en 6s comment s'egrene (s'egraine) dynamiquement le temps de pause sur image.
}
}
function EnArriere()
{
Chiffre=Chiffre-1;
Clone=Chiffre+1;
if(Chiffre<1)
{
Chiffre=NombreImages;
}
GeneriqueEtClone(); //Affecter le nouveau Chiffre ...
if(playpause.className=='play' || !playpause.className)
{
IndicateurGalopant();
}
}
function Animer()
{
if(sens.className == 'sens_avant' || !sens.className)
{
EnAvant(); //Resoudre l'effet de latence qui precede l'execution d'un setInterval
defile=setInterval("EnAvant()",mon_interval); //Repetition sequentielle.
}
else if(sens.className == 'sens_arriere')
{
EnArriere();
defile=setInterval("EnArriere()",mon_interval);
}
}
function StopAnimer()
{
clearInterval(defile);
IndicateurStatique();
}
function PlayPause() //Interrupteur en "va-et-vient"
{
if(playpause.className == 'play' || !playpause.className) //Condition de class ...
{
playpause.className = 'pause';
StopAnimer();
}
else if(playpause.className == 'pause')
{
playpause.className = 'play';
Animer();
}
}
function EnArriereEnAvant() //Commutateur en "va-et-vient", par le jeu de conditions de class
{
if(sens.className == 'sens_arriere' || !sens.className)
{
sens.className = 'sens_avant';
StopAnimer();
EnAvant(); //Resoudre l'effet de latence qui precede l'execution d'un setInterval
if(playpause.className == "play" || !playpause.className)
{
defile = setInterval("EnAvant()",mon_interval); //Ecriture d'une repetition sequentielle
}
}
else if(sens.className == "sens_avant")
{
sens.className = 'sens_arriere';
StopAnimer();
EnArriere();
if(playpause.className == "play" || !playpause.className)
{
defile=setInterval("EnArriere()",mon_interval);
}
}
}
sens.onmousedown=function(){EnArriereEnAvant()}; //"Fonctionner" les elements.
playpause.onmousedown=function(){PlayPause();};
conteneur.onmousedown=function(){PlayPause();};
var indicateur=Bid("indicateur_temporel");
function IndicateurGalopant()
{
IndicateurStatique();
setTimeout("indicateur.className='indicateur_galopant'",15);
}
function IndicateurStatique()
{
indicateur.className='indicateur_statique';
}
</script>
</body>
</html>
Si d'aventure vous aviez une idée ...
Modifié par senteur_honrable (02 Feb 2015 - 20:30)