IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Diaporama avec nombreuses images


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 94
    Par défaut Diaporama avec nombreuses images
    Je suis en train de sécher sur le problème suivant :
    Je voudrais créer un diaporama comportant quelques milliers de photos, d'une taille comprises entre 200 et 600 KO. Ces photos sont stockées dans un sous répertoire du site. Il n'est évidemment pas question de charger l'ensemble des photos avant d'afficher la première photo.

    Par une requête, j'obtiens un tableau comportant la liste de toutes les photos à afficher. Je pensais ensuite aller chercher et afficher ces photos séquentiellement, toutes les 4 ou 5 secondes par exemple. Bien sur, le temps de chargement est variable, à cause du débit variable et de la taille variable des photos.

    Je pensais donc télécharger la photo n+1 pendant l'affichage de la photo n, cet affichage étant ajusté à 4 ou 5 secondes. Si, au bout de ce temps, la photo n+1 est chargée, on remplace la photo n par la n+1 et on charge la photo n+2...
    Si la photo n+1 n'est pas totalement téléchargée, on maintient l'affichage de la photo n jusqu'au chargement complet de n+1. Alors seulement, on remplace la photo n par la n+1 et on charge la photo n+2...

    J'ai déjà bien retourné cette question, rechercher une solution sur différents sites, regardé différents tutos (c'est vrai que jquery, je ne domine pas trop), mais j'ai besoin d'un coup de main. Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    salut,

    Ca semble tourner chez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <html>
        <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
        <script type="text/javascript">
    function debug(str){
      $('#junk')[0].innerHTML+=str+'</br>';
    }
    $(document).ready(function(){
     
      var currentImg = 0;//points on buycostumes
      var imgSources = [
       'http://images.buycostumes.com/mgen/merchandiser/12438.jpg?t=12',
       'http://bzzz.3dsbuzz.com/wp-content/uploads/2011/04/pokemon-logo.jpg',
       'http://images.cheezburger.com/completestore/2010/9/8/9688305c-53a1-403b-9e8f-3e13e7a68428.jpg'
      ];
      var imgBuffered = false;//buffered image has been loaded
      var inTempo=false;//if true, we musn't call swapImage.
      var tempo = 5;//wait for 5seconds before trying to swapImage
     
      //image must have been buffered, tempo must have been elapsed
      //
      //show the hidden image instead of the current one
      //bufferize a new image
      //arm the tempo : 
      // if image has been buffered call swapImage
      // otherwise let the callback of img loaded call swapImage
      function swapImage(){
        inTempo = true;
        debug('swapping '+$('#buffImg').attr('src'));
        $('#img').attr('src', $('#buffImg').attr('src'));
        bufferize();
        window.setTimeout(function(){
          if(!imgBuffered){
            //we DO are waiting for the callback to swap image
            inTempo=false;
          }else{
             debug('five seconds elapsed');
             swapImage();
          }
        }, tempo*1000);
      }
      function bufferize(){
        imgBuffered = false;
        if(currentImg<imgSources.length){
          var imgToBuffer=imgSources[currentImg++];
          debug('loading '+imgToBuffer);
          $('#buffImg').attr('src', imgToBuffer);
        }else{
          //no more image to load
        }
      }
      $('#buffImg').load(function(){
        debug('img loaded '+inTempo);
        imgBuffered  = true;
         if(!inTempo){
            swapImage();
         }else{
           debug('loaded but not 5seconds elapsed');
         }
      });
     
      //begins the stuff
      bufferize();
     
     
    });
    </script>
    	</head>
        <body>
        <img id="img" style="width:200px; height:200px"src="no" />
        <img id="buffImg" style="display:none" src=""/>
        <!-- remove me -->
        <div id="junk"></div>
        </body>	
    </html>
    jpeux étayer si besoin, sinon c'est dans le code.

    edit : jai appliqué ton algo: ne charger une nouvelle image que lorsqu'on affiche celle bufferisée. Changer d'image au minimum toutes les 5 secondes. Des qu'une nouvelle est chargée le cas le cas échéant.

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    tu connais lazyload de jquery ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je suis en train de regarder. Connaissais pas. En tout cas, ils en ont un côté serveur XD.

    Bon, en attendant j'en ai fait un plugin.
    bufferize.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    (function($){
      $.fn.bufferize = function(options){
        var o = $.extend({
          tempo:5,
          swapImg:changeImg
        }, options);
        var hiddenImg;
        var img;
        var currentImg = 0;
        var imgBuffered = false;//buffered image has been loaded
        var inTempo=false;//if true, we musn't call swapImage.
        function changeImg(node, imgName){
          node.attr('src', imgName);
        }
        //image must have been buffered, tempo must have been elapsed
        //
        //show the hidden image instead of the current one
        //bufferize a new image
        //arm the tempo : 
        // if image has been buffered call swapImage
        // otherwise let the callback of img loaded call swapImage
        function swapImage(){
          inTempo = true;
          o.swapImg(img, hiddenImg.attr('src'));
          bufferize();
          window.setTimeout(function(){
            if(!imgBuffered){
              //we DO are waiting for the callback to swap image
              inTempo=false;
            }else{
               swapImage();
            }
          }, o.tempo*1000);
        }
        function bufferize(){
          imgBuffered = false;
          if(currentImg<o.imgs.length){
            hiddenImg.attr('src', o.imgs[currentImg++]);
          }
        }
        return this.each(function(){
          img = $(this);
          $(this).after($('<img>'));
          hiddenImg = $(this).next().hide();
          hiddenImg.load(function(){
            imgBuffered  = true;
             if(!inTempo){
                swapImage();
             }
          });
          bufferize();
        });
      }
    })(jQuery);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <html>
        <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
        <script type="text/javascript" src="bufferize.js"></script>
        <script type="text/javascript">
    $(document).ready(function(){
      var imgSources = [
       'http://images.buycostumes.com/mgen/merchandiser/12438.jpg?t=12',
       'http://bzzz.3dsbuzz.com/wp-content/uploads/2011/04/pokemon-logo.jpg',
       'http://images.cheezburger.com/completestore/2010/9/8/9688305c-53a1-403b-9e8f-3e13e7a68428.jpg'
      ];
      var imgSources2 = imgSources.slice(0).reverse();
      //begins the stuff
      $('#img').bufferize({
        imgs:imgSources,
        tempo:3
      });
     
      $('#img2').bufferize({
        imgs:imgSources2,
        tempo:4,
        swapImg:function(node, imgName){
            node.fadeOut(function(){
            node.attr('src', imgName);
            node.fadeIn();
          });
        }
      });
    });
    </script>
    	</head>
        <body>
        <img id="img" style="width:200px; height:200px" src="no" />
        <img id="img2" style="width:200px; height:200px" src="no" />
        </body>	
    </html>
    Dernière modification par Invité ; 02/08/2011 à 14h36. Motif: support des effets

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ca me semble un peu compliqué alors que l'utilisation de l'événement load d'une image serait plus approprié
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Invité
    Invité(e)
    Par défaut
    ben la question c'est un peu plus que détecter le load d'une image.
    C'est de rafraichir le stuff et de bufferiser une image.

    Note : j'utilise load.

    Je viens de regarder lazyload, je ne crois pas qu'il y ait un rapport avec une tempo de rafraichissement/buffering des images.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème page JSP avec nombreuses images
    Par lordmyko dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 17/05/2014, 18h32
  2. Diaporama avec liens sur les images
    Par LiliValerie dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 03/04/2012, 10h59
  3. creer un diaporama avec des images
    Par semikeum dans le forum Débuter
    Réponses: 9
    Dernier message: 16/03/2010, 07h48
  4. diaporama avec image rotator
    Par Babelvf dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 20/09/2009, 21h07
  5. diaporama avec images
    Par Greatz dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/07/2008, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo