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 :

Barre de progression


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Billets dans le blog
    1
    Par défaut Barre de progression
    Bonjour,

    Après maintes reprises et aussi, des recherches sur la toile, je bloque sur ce code. J'aimerais avoir vos avis de pourquoi cela ne fonctionne pas ?

    HTML
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h4>Javascript/Jquery</h4>
                    <div id="progress">
                        <p>Niveau de compétence...<strong>0%</strong></p>
                        <progress value="5" min="0" max="100" id="myProgress">0%</progress>
                    </div>

    JAVASCRIPT
    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
    progressValue: function () {
            console.info("app.progressValue")
     
            var val = document.getElementById("#myProgress").getAttribute("value")
            if (val >= 100){
                val = 5
                return
            }
            var newVal = val*1+0.25
            var txt = Math.floor(newVal)+"%"
     
            document.getElementById("#myProgress").getAttribute("value",newVal).text(txt)
            document.querySelector("p strong").textContent = txt
     
            setInterval(function () {
                app.progressValue()
            }, 40)
        }

    Merci

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    Attention
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.info("app.progressValue")
    Au vue de ce lien, préfères plutôt console.log.
    Penses à mètres des ; entre chaque instructions, peut être que ta fonction est quittée avant la fin, se qui expliquerai pour partie que cela ne fonctionne pas.
    document.getElementById("#myProgress") il me semble que la # est de trop.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre actif

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Billets dans le blog
    1
    Par défaut
    J'ai mis des ";" (même si pas obligatoire aujourd'hui en JS )partout et enlever le " # " mais rien n'a changé !

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Pas besoin de # avec getElementById. Ce n'est peut-être pas la seule erreur mais en tous cas c'en est une.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.getElementById("myProgress").

  5. #5
    Membre actif

    Inscrit en
    Octobre 2012
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 94
    Billets dans le blog
    1
    Par défaut
    Je n'avais pas mis les " # " mais vu que mon code ne fonctionnait pas, je me suis dis je vais les mettre pour voir ! Mais y'a rien qui a changé .

  6. #6
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    ça marchera jamais !

    tu lances récursivement une fonction par un setinterval.

    ça doit exploser la pile, et de toutes façon ce code n'a aucun sens puisque ta fonction setinterval appelle toutes les 40 milisecondes sa propre fonction.

    donc au début tu a une fonction
    puis au bout de 40 ms tu en à deux
    puis au bout de 80ms tu en a 4,
    puis au bout de 120ms tu en à 8 , etc,
    ce qui fait qu'au bout d'une seconde il y en a 33 554 432, si mes calculs sont exacts..

    Je me demande vraiment pourquoi faire ??

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Exemple :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="progress">
        <p>Niveau de compétence : <progress id="myProgress" min="0" max="100" step="0.25" value="5"></progress> <strong>5.00 %</strong></p>
    </div>


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    let progressValue = () => {
        const elemMyProgress = document.querySelector("#myProgress");
     
        let val = Number(elemMyProgress.value);
     
        // debug, console, touche F12
        console.log(`value = ${ val }`);
     
        if (val >= 100) {
            val = 5
            return;
        }
     
        let 
            newVal = val + 0.25,
            txt = newVal.toFixed(2) + " %"
     
        // debug
        console.log(`newVal = ${ newVal }`);
        console.log(`txt = ${ txt }`);
     
        elemMyProgress.value = newVal;
     
        document.querySelector("#progress > p > strong").textContent = txt
     
        setTimeout(progressValue, 1000); // 1s
    };
     
    progressValue();

    EDIT 2018-09-01

    Un meilleur code :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="progress">
        <p>Niveau de compétence : <progress min="0" max="100" step="0.25" value="5"></progress> <strong>5.00 %</strong></p>
    </div>

    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
    21
    22
    23
    24
    const 
        elemDivProgress = document.querySelector('#progress'),
        elemProgress = elemDivProgress.querySelector('progress'),
        elemStrong = elemDivProgress.querySelector('strong');
     
    let progressValue = () => {
        let val = Number(elemProgress.value);
     
        if (val >= 100) {
            return;
        }
     
        let 
            newVal = val + 0.25,
            txt = newVal.toFixed(2) + " %"
     
        elemProgress.value = newVal;
     
        elemStrong.textContent = txt
     
        setTimeout(progressValue, 1000); // 1q
    };
     
    progressValue();

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  8. #8
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    @avion

    ton code JS fait presque 200 lignes, bon, et en plus tu sembles un adepte de l'omission des points-virgules, bon.

    Je sais qu'en JS on peut souvent en être amené à devoir écrire pas mal de lignes de code, et que l'utilisation des points-virgules n'est pas obligatoire.
    Mais la pour moi, qui utilise toujours les points virgules, lire ton code est un supplice, alors je vais pas continuer.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    la question a déjà été traitée dans cette discussion récente.

    NoSmoking y propose un code élégant et efficace : https://codepen.io/jreaux62/pen/xaqwQG
    Dernière modification par Invité ; 01/09/2018 à 12h27.

Discussions similaires

  1. Indy FTP (idFTP) faire une barre de progress de transfert
    Par Harry dans le forum Web & réseau
    Réponses: 4
    Dernier message: 09/07/2004, 13h15
  2. [VB.NET] Pb avec le bouton Annuler d'1 barre de progression
    Par dada1982 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2004, 09h56
  3. Réponses: 12
    Dernier message: 27/05/2004, 00h13
  4. [DEBUTANT] Barre de progression
    Par pupupu dans le forum MFC
    Réponses: 4
    Dernier message: 18/01/2004, 16h47
  5. [web] Barre de Progression ASCII
    Par Red Bull dans le forum Web
    Réponses: 13
    Dernier message: 05/06/2003, 12h56

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