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

JavaScript Discussion :

Galerie photo et des nouveaux li et ul


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Galerie photo et des nouveaux li et ul
    Bonjour à tous,

    Je me lance peu à peu avec JavaScript pour mon site, je pensais avoir tout gagné tout compris.
    Mes pages (html), js et css fonctionnent très bien lorsque mon html ne contient que très peu de choses. Une fois que je commence à remplir ma page badabim badaboum, plus rien ne va. Je sais que ça doit être une faute bête, de novices...

    Ceux qui souhaitent m'aider sont les bienvenus parce que là je sèche (même si je continue d'essayer de trouver où est la bêtise que j'ai faite).

    Le but de mon JS & HTML est de faire une petite galerie photo qui bouge grâce à des sélecteurs (suivant et précédent). Voici mon code 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
    var next = function (element, nodeName) {
        if(element.nextSibling){
            if(element.nextSibling.nodeName === nodeName) { 
                return element.nextSibling;
            } else {
                return next(element.nextSibling, nodeName);
            }
        }
        };
     
        var previous = function (element, nodeName) {
    if(element.previousSibling){
            if(element.previousSibling.nodeName === nodeName) { 
                return element.previousSibling;
            } else {
                return previous(element.previousSibling, nodeName);
            }
        }
        };
     
        window.addEventListener("load", function () {
            var photo = document.querySelector('#photo'),
                prec = document.querySelector("#precedent"),
                suiv = document.querySelector("#suivant"),
                li = document.querySelector('li');
     
     
            li.querySelector('img').style.height = '130px';
     
     
            suiv.addEventListener("click", function () {
                li.querySelector('img').style.height = '';
     
                li = next(li, 'LI') || li;
                li.querySelector('img').style.height = '130px';
                // récupére l'url du href de l'ancre de l'image
                photo.src = li.querySelector("a").getAttribute("href");
            }, false);
     
            prec.addEventListener("click", function () {
                li.querySelector('img').style.height = '';
     
                li = previous(li, 'LI') || li;
                li.querySelector('img').style.height = '130px';
                // récupére l'url du href de l'ancre de l'image
                photo.src = li.querySelector("a").getAttribute("href");
            }, false);
        }, false);
    Ce code fonctionne si ma page html ne contient rien d'autre que mon diapo de photo :

    Code html : 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
    <div id='diapo'>
     
                <div ><img id="photo" src="images/grande/salon.jpg" alt="image" /></div>
                <div>
                    <div id="precedent"><img src="images/prec.gif" alt="precedent" /></div>
                    <ul>
     
                        <li><a href="images/grande/salon.jpg"><img src="images/petite/salon.jpg" alt="Title #0" /></a></li>
                        <li><a href="images/grande/chambre1.jpg"><img src="images/petite/chambre1.jpg" alt="Title #0" /></a></li>
                        <li><a href="images/grande/chambre2.jpg"><img src="images/petite/chambre2.jpg" alt="Title #0" /></a></li>
                        <li><a href="images/grande/chambre3.jpg"><img src="images/petite/chambre3.jpg" alt="Title #0" /></a></li>
                        <li><a href="images/grande/cuisine.jpg"><img src="images/petite/cuisine.jpg" alt="Title #0" /></a></li>
                    </ul>
                    <div id="suivant"><img src="images/suiv.gif" alt="suivant" /></div>
                </div>
            </div>

    Si je rajoute des listes li, par exemple dans mon menu, ça ne fonctionne plus et la console JS m'indique :

    Uncaught TypeError: Cannot read property 'style' of null
    (qui renvoie à = li.querySelector('img').style.height = '130px'; ).

    Si une bonne âme charitable pourrait m'élever au rang de maître de la galerie en m'aidant, je serai extrêmement reconnaissante ! Si par moi même je trouve ma bourde, je me flagelle pendant tout le mois.

    Merci, et désolée si mon code vous semble dégueulasse.
    Bonne journée à tous.

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    querySelector sélectionne un élément et un seul. Là tu sélectionnes la première balise <li> et la première balise <img> dans cette balise <li>. S'il n'y a pas d'image dans ta première balise, img vaudra null d'où l'erreur quand tu essaies de modifier le style. Utilise un sélecteur plus précis qu'un simple nom de balise, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var lis = document.querySelectorAll('#diapo ul li');
    One Web to rule them all

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci ! J'avais essayé avec "#diapo li" mais ça ne fonctionnait pas Milles merci Bonne journée !

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Si tu as mis ton autre <li> à l'intérieur du div#diapo, ça ne résout pas le problème en effet. Mais tous les <li> sont censés être à l'intérieur d'un <ul>, donc ça reste louche.
    One Web to rule them all

Discussions similaires

  1. Impossible d'afficher des galeries photos sous firefox
    Par marc5031 dans le forum Firefox
    Réponses: 4
    Dernier message: 06/10/2012, 08h39
  2. Réponses: 1
    Dernier message: 01/04/2012, 11h00
  3. [Joomla!] Galerie photo et attente de validation des photos par l'admin
    Par filiplarlibe dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 03/08/2009, 13h05
  4. [10g]Fonction des nouveaux services par rapport à la 9i
    Par Laurent Dardenne dans le forum Oracle
    Réponses: 13
    Dernier message: 04/07/2005, 13h56
  5. Ajouter des nouveaux package à mon projet
    Par mikky dans le forum JBuilder
    Réponses: 3
    Dernier message: 31/03/2005, 07h54

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