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 :

Animation et setTimeout synchrone


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut Animation et setTimeout synchrone
    Bonjour, je souhaite en fait créer une petite animation en javascript. Cette animation sera incorporée en une fonction Animation().

    Cette animation aura pour but de creer un voile noir qui va se degrader sur la page, ensuite afficher une div qui se placera au milieu de la page.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    function Animation (){
     
    var middle_x= parseInt(window.innerWidth / 2)
    var middle_y= parseInt(window.innerHeight / 2)
     
    var voile = document.createElement("div")
    voile.setAttribute("class", "voile_noir")
    voile.style.width = window.innerWidth + 'px'
    voile.style.height = window.innerHeight + 'px'
     
    // Fonction qui va degrader le voile
     
    var degradeVoile = function () {
     
     if(typeof opVoile_i == 'undefined')
     {
      // Point d'entree obligatoire car opVoile_i est le curseur de l'animation
      opVoile_i = 0
      // On cree le setTimeout de l'animation
     
     } else {
     // Controle du curseur
       if(i >= 100) {
          // Fin de l'animation
          clearTimeout(timer1)
          delete opVoile_i
       } else {
       opVoile_i ++
       }
     }
     
      timer1 = setTimeout(degradeVoile, 10)
     // L'opacite du voile est l'image du curseur c'est un pourcentage
     opVoile = opVoile_i * 100
     // Application de l'opacite
     voile.style.opacity = opVoile / 100
     voile.filter= 'alpha(opacity=' + opVoile + ')'
     
    }
     
     degradeVoile()
     ////// ******* ======>>> COMMENT EST-CE POSSIBLE D'EXECUTER DU CODE UNE FOIS QUE LA FONCTION A FINI DE TIMEOUTER??? A PART UN WHILE SUR UNE VARIABLE DE TEST ???
     alert("c'est bel et bien la fin... :s")
     
     
    }


    Comment est-il possible d'executer de maniere synchrone la boucle de timeout ? Merci d'avance.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    je m'up

  3. #3
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    275
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 275
    Points : 186
    Points
    186
    Par défaut
    Je sais pas si ce sera pour tout le monde pareil, mais je ne comprends pas ta question.
    abertaud
    ---------

    - pas de réponse technique en PV, utilisez les forums
    - si vous trouvez seuls la solution, n'abandonnez pas votre post, mettez-le à jour pour les autres
    - le tag est parfois en voie d'extinction, participez à sa survie

  4. #4
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par odissey Voir le message
    ////// ******* ======>>> COMMENT EST-CE POSSIBLE D'EXECUTER DU CODE UNE FOIS QUE LA FONCTION A FINI DE TIMEOUTER??? A PART UN WHILE SUR UNE VARIABLE DE TEST ???
    Tu place le code à exécuter après la ligne où tu fais clearTimeout

    Sinon qu'entends-tu par synchrone ? Le fait d'avoir une forme de boucle
    qui monopoliserait tout le cpu pour exécuter du code après celle-ci ? :-)
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Pardon pour la réponse tardive. Non il ne s'agit pas d'une boucle qui monopoliserait tout le CPU, je voudrais simplement que le setTimeout agisse comme une boucle. Or, et vous pourrez le constater si vous essayez ce code, si vous placé une instruction après l'appel de la fonction, l'instruction va être exécutée une fois que l'appel aura été fait, et non pas à la fin de l'appel de la fonction. Suis-je un peu plus clair? Donc voila le soucis, j'aimerais que la fonction (qui contient un setTimeout) puisse suggérer à l'interpréteur de terminer son exécution avant de passer à l'instruction suivante.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par odissey Voir le message
    Bonjour, je souhaite en fait créer une petite animation en javascript. Cette animation sera incorporée en une fonction Animation().

    Cette animation aura pour but de creer un voile noir qui va se degrader sur la page, ensuite afficher une div qui se placera au milieu de la page.



    Comment est-il possible d'executer de maniere synchrone la boucle de timeout ? Merci d'avance.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    S'il-vous-plait,

    quelqu'un aurait une réponse ou une piste pour ce problème là?

    Je vous remercie d'avance

  8. #8
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut
    Quel interet de faire un settimeout synchrone ?

    C'est la fonction du settimeout qui fait avancer ton degradé, et comme ça, pas besoin de synchro

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Merci pour ta réponse Madevilts
    Je précise que mon souhait est de pouvoir executer certaines actions APRES le dégradé. Il n'y a pas de problème avec le setTimeout en particulier.

    Je m'explique:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     function Animation()
     {
         degradeObjet1()
         degradeObjet2ApresObjet1()
         afficheCoucheApresDégradé()
     }

  10. #10
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Ce que tu cherches à faire n'est tout simplement pas faisable en javascript.

    Javascript travaille avec les évènements, il faut s'y adapter dans la manière
    de coder. Il n'est pas multitâche, donc si tu fais une boucle d'attente tu
    empêche tout autre exécution de fonctions js dans la même page.

    Pour exécuter du code après ton animation tu dois le placer là où tu as mis
    le clearTimeout dans ton exemple.
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 56
    Points : 34
    Points
    34
    Par défaut
    Je te remercie pour ta réponse qui éclaire ma lanterne de newbie je vais essayer de m'y faire. Ou je vais tout simplement arrêter le javascript... Vivement le javascript 2?? Ok je sors -> []

  12. #12
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Il te suffit d'écrire les choses à peine differemment

    Tu peux passer une fonction à la fonction degradeVoile pour qu'elle
    l'appelle en fin de traitement, voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    var degradeVoile = function (onEnd) {
       ...
       if(i >= 100) {
          // Fin de l'animation
          clearTimeout(timer1)
          delete opVoile_i
          onEnd();
       }
       ...
    }
     
     degradeVoile( function() { alert("c'est bel et bien la fin... :s"); } );
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Object, setTimeout() & animation
    Par suntsu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/05/2009, 12h32
  2. Animation progressive avec setTimeout
    Par bracket dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/03/2009, 13h27
  3. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09
  4. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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