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 :

ProgressBar, communication jscript/html dans un for


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Par défaut ProgressBar, communication jscript/html dans un for
    Bonjour, je me penche actuellement sur la réalisation d'une progress bar, gérer non pas par le temps, mais par l'execution d'un script.

    Je traite un tableau dans une boucle for, j'ai donc penser a deux solutions, dont aucune n'a marché :

    -a chaque tour de boucle faire un innerHTML pour agrandir une div (ou modifier un texte pour afficher le pourcentage)

    -creer un timer qui appelerait une fonction modifiant le html via des variable global que je modifie dans mon for

    mon code ressemble donc a sa pour la premiere solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(i ; i < tab.length ; i++)
        {
        //Execution du traitement du tableau
     
        ProgressBar.innerHTML = "<font color=\"0x00FF\" >"+Math.round(((i/tab.length)*100))+"%</font>"; 
        }
    ou a sa :

    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
     
    //Variable Global
    var iGlobal ;
    var iTotal ;
     
    //[...]
     
    timer = new Timer() ; //j'ai une classe timer a ma disposition qui appel une fonction toute les seconde
     
    iTotal = tab.length ;
    timer.function = "UpdateProgressBar()"
     
    for(i ; i < tab.length ; i++)
        {
        iGlobal = i ;
        //Execution du traitement du tableau
        }
     
    //[...]
     
    function UpdateProgressBar ()
    {
    ProgressBar.innerHTML = "<font color=\"0x00FF\" >"+((iForTimer/iTotalForTimer)*100)+"%</font>";  
    }
    Le souci c'est que je ne sais pas pourquoi, mais cela ne veux pas s'updater dans le for, le pourcentage passe de 0% à 100% d'un coup, dans les deux cas.

    Y a t-il des propriétés de communication entre jscript et html qui empêcherait le html de s'actualiser a l’intérieur d'une boucle ?

    Ou si vous avez une solution sympa qui marcherait (je ne peux me permetre d'utiliser que du jscript, pas de jQuery, ou autre AJAX, etc)

    Merci !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 162
    Par défaut
    En fait, le problème est que le rafraichissement de la page HTML ne se fait pas durant l'exécution de ton script de par la nature de javascript (pseudo single-thread). Il te faut pour cela utiliser des timers pour gérer l'interactivité avec la page HTML pendant l'exécution du ton script. Je te recommande de lire ce lien http://ejohn.org/blog/how-javascript-timers-work/ qui explique comment les timers fonctionnent.

    Après, tu as l'air d'être sur la bonne piste puisque tu dis avoir une classe Timer, mais que fait-elle exactement ?

    De plus, une bonne pratique est d'éviter de passer une chaine en paramètre pour l'exécution d'une fonction, mais plutot utiliser directement sa référence (son nom en fait), exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timer.function = UpdateProgressBar;
    plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timer.function = "UpdateProgressBar()";
    A+

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 14
    Par défaut
    Après beaucoup d’essais, j'ai fini par comprendre pourquoi cela ne marchait pas.

    J'utilise une fenêtre ie intégré dans un logiciel, celle ci ce fige a l’exécution de mon code, c'est en remplacement mon pourcentage par un .gif que j'ai réussi a comprendre sa.

    Il m’était donc impossible de voir une quelconque modification sur la page.

    Sinon, sa aurait effectivement marcher je pense.

    Le lien m'a été bien utile, j'en ai trouver un pal mal qui explique l'utilisation de setTimeout.

    Merci encore, malgré mon échec

Discussions similaires

  1. inclure du html dans une boucle for en php?
    Par stef06 dans le forum Langage
    Réponses: 4
    Dernier message: 31/07/2006, 14h25
  2. Lien html dans une boucle For(?)
    Par zorba49 dans le forum VBScript
    Réponses: 6
    Dernier message: 17/05/2006, 15h59
  3. Intégration éditeur html dans page asp
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 2
    Dernier message: 06/05/2004, 09h04
  4. Insertion code html dans bdd
    Par jeff37 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/04/2004, 15h03
  5. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29

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