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 :

Shadowbox et javascript


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Par défaut Shadowbox et javascript
    Bonjour

    Voici mon probleme : j'ai deux code en javascript qui se suivent et je crois que le fait qu'il y ait deux window.onload empêche l'un des deux de marcher.

    Comment faire pour que cela fonctionne?

    MERCI

    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
    <script type="text/javascript">
    function addLoadEvent(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                if (oldonload) {
                    oldonload();
                }
                func();
            }
        }
    }
    addLoadEvent(function() {
        slideMenu.build('sm',700,10,10,1);
    });
    </script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">
     
    Shadowbox.loadSkin('classic', 'src/skin');
    Shadowbox.loadLanguage('en', 'src/lang');
    Shadowbox.loadPlayer(['flv', 'html', 'iframe', 'img', 'qt', 'swf', 'wmp'], 'src/player');
     
    window.onload = function(){
        Shadowbox.init();
        initDemos();
    };
     
    </script>

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Par défaut
    Bonjour,

    Il y a surtout un problème de "visibilite" de la mémorisation de onload dans le premier script :

    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
    <script type="text/javascript">
      function addLoadEvent(func) {
        var oldonload = window.onload; seulement accessible pendant l'exécution de addLoadEvent
        if (typeof window.onload != 'function') {
          window.onload = func;
        } else {
          window.onload = function() {
            if (oldonload) { jamais initialisée car il n'y a pas de variable globale ayant ce nom ;)
              oldonload();
            }
            func();
          }
        }
      }
      addLoadEvent(function() {
        slideMenu.build('sm',700,10,10,1);
      });
    </script>

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Par défaut
    Ok...

    mais quelle est la solution pour que cela marche?

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    Citation Envoyé par devyan Voir le message
    Il y a surtout un problème de "visibilite" de la mémorisation de onload dans le premier script :
    tu pourrais préciser ?

    Tel que tu le dis, il ne me semble pas : oldonload est effectivement une variable locale, destinée à mémoriser l'état initial du onload. Mais dans la mesure où l'évènement est redéfini (surchargé) dans la même fonction, ça ne doit pas poser de problème.
    A la limite, c'est plutôt le 2° script qui devrait être adapté pour utiliser lui aussi cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <script type="text/javascript">
     
    Shadowbox.loadSkin('classic', 'src/skin');
    Shadowbox.loadLanguage('en', 'src/lang');
    Shadowbox.loadPlayer(['flv', 'html', 'iframe', 'img', 'qt', 'swf', 'wmp'], 'src/player');
     
    addLoadEvent(function() {
        Shadowbox.init();
    });
     
    addLoadEvent(function() {
        initDemos();
    });
    </script>
    A+

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Bonjour,tu pourrais préciser ?
    J'ai ajouté des notes dans l'exemple de code.

    Le code de l'événement fait référence à une variable locale à la fonction d'initialisation.
    Donc au moment du déclenchement de l'événement cette variable n'est plus disponible (plus "visible") => if (oldonload) donnera toujours false.


    complément de réponse :
    Pour gérer ce genre de chose il faudrait avoir une variable globale qui sert de "pile" (c'est probablement ce qui est fait dans les JQuery pour la gestion des événements)
    Je parle de pile car cela permet de mémoriser plus d'un niveau "old"


    devyan

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Par défaut
    Bonjour !

    Alors voici mon site internet :
    VOTRE MONDE A LA CARTE/

    Le premier code (voir plus haut) concerne mon menu défilant.

    Le second code se trouve dans la page "Cartes et infographies" (et réalise l'effet d'ombre lorsque l'on clique sur l'un des documents).
    Vous verrez d'ailleurs que j'ai du mettre un bouton "Accueil" en lieu et place de mon menu défilant car sinon l'effet d'ombre ne marche pas.

    J'ai essayé le code de E.Bzz mais ça ne marche pas.

    Merci

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par Neitanod Voir le message
    J'ai essayé le code de E.Bzz mais ça ne marche pas.
    Un peu léger comme diagnostic

    Quel effet ?
    Des erreurs ? Lesquelles ? Sur quelles lignes ?

    A+

Discussions similaires

  1. Les meilleurs livres pour apprendre le JavaScript
    Par vermine dans le forum Livres
    Réponses: 23
    Dernier message: 10/06/2019, 18h58
  2. javascript dans page appelée par shadowbox
    Par kaking dans le forum jQuery
    Réponses: 2
    Dernier message: 13/02/2012, 08h17
  3. JavaScript<---->ActionScript
    Par crazypiou dans le forum Flash
    Réponses: 21
    Dernier message: 17/04/2009, 17h14
  4. appel xmlservice via fonction javascript
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 06/05/2003, 14h24
  5. JavaScript de vérification de formulaire
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/02/2003, 13h48

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