quinton75
Messages postés44Date d'inscriptionmercredi 13 octobre 2010StatutMembreDernière intervention 6 juillet 2011
-
21 févr. 2011 à 17:55
007Julien
Messages postés276Date d'inscriptionmercredi 22 septembre 2010StatutMembreDernière intervention 8 janvier 2014
-
2 mars 2011 à 12:16
Bonjour
Je souhaite faire defiler mes photos avec un timer de 3 secondes par exemple...Pour le moment elles ne defilent qu'avec des flèches...
007Julien
Messages postés276Date d'inscriptionmercredi 22 septembre 2010StatutMembreDernière intervention 8 janvier 20144 1 mars 2011 à 15:24
Le prototype suivant met en évidence les principes du diaporama et devrait permettre d'en construire de très légers fonctionnant sur tous les navigateurs récents...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title>Diaporama</title>
<style type="text/css">
body{padding:0;font:16px/24px Garamond;text-align:center;background:#ddd}
#cnt {margin:20px auto;position:relative;width:133px;height:137px;background:transparent;border:1px solid black;overflow:hidden}
ul {position:relative;margin:0;padding:0;top:0;left:0;width:798px;height:137px;list-style-type:none;}
img {display:block;border:0;margin:0px;width:133px;height:137px;}
li {float:left;display:inline;width:133px;}
</style>
</head>
Les principes du diaporama
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
[javascript:avc() Image suivante]
[javascript:dpr(okd=!okd) Diaporama]
<script type="text/javascript">
var lrg=133,dlt=10;
// lance le défillement pour afficher l'image suivante
function avc(){
var a=document.getElementById('dia').offsetLeft-dlt,b=a,n=0;
while (b<0) {b+=lrg;n++}
document.getElementById('dia').style.left=a+'px';
if (dlt
</html>
En bref, il convient de juxtaposer des images (ou contenus de balises li) dont on fait varier la position relative dans un container dont la fenêtre est réduite à une largeur d'image.
En reprenant la dernière image en fin de liste, la solution proposée permet de replacer le diaporama en position initiale à l'insu de l'utilisateur et d'obtenir ainsi un défilement continu.
À partir de là, toutes les améliorations sont possibles pour adapter le script à une collection d'images. Avec un peu de PHP, il est même loisible de choisir des images aléatoirement et de construire à chaque chargement un diaporama différent.
quinton75
Messages postés44Date d'inscriptionmercredi 13 octobre 2010StatutMembreDernière intervention 6 juillet 2011 1 mars 2011 à 16:24
Merci bcp... maias j'ai quasiment fini mon diapo, il me reste juste le timer donc je ne souhaiterais pas recommencer à 0.
Voici le js de navigation de slides
// when the DOM is ready...
$(document).ready(function () {
var $panels = $('#slider .scrollContainer > div');
var $container = $('#slider .scrollContainer');
// if false, we'll float all the panels left and fix the width
// of the container
var horizontal = true;
// float the panels left if we're going horizontal
if (horizontal) {
$panels.css({
'float' : 'left',
'position' : 'relative' // IE fix to ensure overflow is hidden
});
// calculate a new width for the container (so it holds all panels)
$container.css('width', $panels[0].offsetWidth * $panels.length);
}
// collect the scroll object, at the same time apply the hidden overflow
// to remove the default scrollbars that will appear
var $scroll = $('#slider .scroll').css('overflow', 'hidden');
// apply our left + right buttons
$scroll
.before('')
.after('');
// handle nav selection
function selectNav() {
$(this)
.parents('ul:first')
.find('a')
.removeClass('selected')
.end()
.end()
.addClass('selected');
}
$('#slider .navigation').find('a').click(selectNav);
// go find the navigation link that has this target and select the nav
function trigger(data) {
var el = $('#slider .navnav .navigation').find('a[href$="' + data.id + '"]').get(0);
selectNav.call(el);
}
if (window.location.hash) {
trigger({ id : window.location.hash.substr(1) });
} else {
$('ul.navigation a:first').click();
}
// offset is used to move to *exactly* the right place, since I'm using
// padding on my example, I need to subtract the amount of padding to
// the offset. Try removing this to get a good idea of the effect
var offset = parseInt((horizontal ?
$container.css('paddingTop') :
$container.css('paddingLeft'))
|| 0) * -1;
var scrollOptions = {
target: $scroll, // the element that has the overflow
// can be a selector which will be relative to the target
items: $panels,
navigation: '.navigation a',
// selectors are NOT relative to document, i.e. make sure they're unique
prev: 'img.left',
next: 'img.right',
// allow the scroll effect to run both directions
axis: 'xy',
onAfter: trigger, // our final callback
offset: offset,
// duration of the sliding effect
duration: 500,
// easing - can be used with the easing plugin:
// http://gsgd.co.uk/sandbox/jquery/easing/
easing: 'swing'
};
// apply serialScroll to the slider - we chose this plugin because it
// supports// the indexed next and previous scroll along with hooking
// in to our navigation.
$('#slider').serialScroll(scrollOptions);
// now apply localScroll to hook any other arbitrary links to trigger
// the effect
$.localScroll(scrollOptions);
// finally, if the URL has a hash, move the slider in to position,
// setting the duration to 1 because I don't want it to scroll in the
// very first page load. We don't always need this, but it ensures
// the positioning is absolutely spot on when the pages loads.
scrollOptions.duration = 1;
$.localScroll.hash(scrollOptions);
});
007Julien
Messages postés276Date d'inscriptionmercredi 22 septembre 2010StatutMembreDernière intervention 8 janvier 20144 2 mars 2011 à 12:16
D'autant plus que ce script n'est pas le script de navigation mais seulement celui de mise en place exécuté à l'ouverture de la page lorsque le DOM (l'objet qui modélise du document) est prêt.
En effet, ce script définit l'axe (horizontal) de scrolling, puis modifie le style des panels (analogues à mes balises li) qui doivent s'aligner à gauche (float:left;) et dont la position doit être relative dans un container dont la largeur doit être égale à la largeur de chacun des panneaux multipliée par le nombre de panneaux.
Il applique ensuite le style overflow:hidden (qui cache tout ce qui sort des dimensions d'un élément et permet d'obtenir une fenêtre sur les éléments intérieurs dont on fait varier la position) sur l'élément désigné par l'id slider et de classe scroll (var $scroll = $('#slider .scroll').css('overflow', 'hidden');), puis définit la fonction selectNav pour en faire un évènement à activer lors des clics sur l'un des quatre boutons figurants au centre sous le diaporama (partant de l'élément cliqué cette fonction remonte à l'élément parent pour supprimer la classe selected de chacun des liens et revenir in fine à l'élément initial pour le sélectionner).
... etc.
J'arrête là, les instructions suivantes ont pour but d'afficher à l'ouverture, la bonne image si l'adresse appelée est prolongée par un # suivi d'un numéro d'image (fonctionnement dégradé sans javascript)
Ce script m'avait permis de trouver les boutons et donc de lancer le défilement du diaporama en simulant un click.
À défaut de mettre en oeuvre une solution personnelle parfaitement adaptée, il conviendrait pour éviter ce genre de bricolage de s'en tenir à un plugin de Jquery convenablement initialisé.