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 :

Bouton suivant reste grisé


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 41
    Par défaut Bouton suivant reste grisé
    Bonjour,


    J'ai une application où je dois gérer mon historique moi même, dans le but de pouvoir partager des pages avec des paramètres spécifiques en faisant un simple copier/coller de l'URL (à la google Maps un peu).

    Dans ma vue, l'utilisateur peut naviguer et visualiser différents SVG. Ils sont en fait dans un `<embed>` (Je ne trouve plus la balise inline code) construit en Javascript.

    Pour changer le SVG affiché, j'appelle cette fonction :

    Code javascript : 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
     
    $scope.changeSVG = function (svgName, fromPrevious) {
        if (!fromPrevious)
            $scope.previousHistory.unshift(svgName);
     
        $scope.currentCartography = svgName;
     
        if (window.panZoom)
            removeEmbed();
        var svgPath = "SVG/" + $scope.currentLanguage + "/" + svgName + ".svg";
     
        for (var i = 0; i < $scope.cartoList.length; i++) {
            if (svgName === $scope.cartoList[i].fileName) {
                $scope.currentIndex = i;
                var defaultZoom = $scope.cartoList[i].defaultZoom;
                break;
            }
        }
        lastEmbed = createNewEmbed(svgPath, defaultZoom);
    };

    Quand le SVG est affiché et quand l'utilisateur zoome ou drag celui-ci, ce code est appelé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     var scope = angular.element(document.getElementById('container')).scope();
     
     var sharingURL = window.location.href.split("?")[0] + "?shared=" + scope.currentCartography + "&sZoom=" + (this.getZoom() / this.originalState.zoom) + "&sPanX=" + this.getPan().x + "&sPanY=" + this.getPan().y;
     window.history.pushState(scope.stateId, "CartoViewer", sharingURL);
     scope.stateId++;
    Pour gérer l'historique des SVG affichés, j'ai donc :
    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
     
    window.onpopstate = function(event) {
    var scope = angular.element(document.getElementById('container')).scope();
    scope.$apply(function () {
        if (scope.stateId)
            scope.lastId = scope.stateId;
        scope.stateId = event.state;
        if (scope.stateId < scope.lastId)
            console.log("Previous button pressed");
        else
            console.log("Forward button pressed");
        if(scope.previousHistory[1]) {
            var toGo = scope.previousHistory[1];
            scope.nextHistory.unshift(scope.previousHistory[0]);
            if (scope.previousHistory[1] === scope.historyStart)
                scope.previousHistory.splice(0, 2);
            else
                scope.previousHistory.splice(1, 1);
            if (toGo != 'INDEX')
                scope.changeSVG(toGo, true);
            else
                scope.setHomeView();
        }
    })
    };
    Donc mon bouton précédent fonctionne, lorsque je clique dessus, le SVG précédent est affiché jusqu'à éventuellement me rendre sur ma page d'accueil.

    Mais le bouton suivant reste grisé.

    Je comptais construire de la même manière une variable `nextHistory` mais je ne sais pas pourquoi ce bouton suivant reste désactivé, même après avoir cliqué sur le bouton précédent.

    Une idée de pourquoi celui-ci reste grisé et comment fixer ça ?

    Ou est-ce qu'il est possible de forcer l'activation de celui-ci ?

  2. #2
    Membre chevronné Avatar de 01001111
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 319
    Par défaut
    Si le bouton suivant reste désactivé, sans avoir tout ton code sous les yeux, j'ai le pressentiment que cela vient d'un excès de pushState.
    quand tu fais précédent, le navigateur fait sans doute un pushState qui du coup crée une nouvelle entrée dans l'historique, ce qui désactive aussitôt le bouton suivant. Essaie de ne déclencher le pushState que pour une nouvelle image svg parcourue.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 41
    Par défaut
    Non le problème reste le même, par contre j'ajoute une autre information au problème :

    Lorsque j'arrive sur la première page affichée via le bouton précédent, celui-ci reste activé une dernière fois, et cette fois-ci (lors du 2ème clic qui ne change pas de page), il réactive le bouton suivant.

Discussions similaires

  1. [AC-2007] Bouton Affichage reste grisé dans le ruban
    Par lio33 dans le forum IHM
    Réponses: 0
    Dernier message: 05/10/2010, 15h40
  2. Bouton suivant grisé sur ouverture de formulaire
    Par Tatoine dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/08/2009, 16h42
  3. Réponses: 2
    Dernier message: 24/04/2006, 13h56
  4. [wxpython] bitmap bouton qui reste pressé
    Par hysah dans le forum wxPython
    Réponses: 3
    Dernier message: 20/01/2006, 20h41
  5. Bouton suivant et précédent
    Par claralavraie dans le forum ASP
    Réponses: 13
    Dernier message: 26/12/2005, 16h55

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