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 :

Eviter le scintillement lors de manip css avec javascript...


Sujet :

JavaScript

  1. #1
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut Eviter le scintillement lors de manip css avec javascript...
    Bonjour,

    presque tout est dans le titre...
    je rajoute quelques détails quand même,

    Voilà, j'ai fais un petit jeu de bacgkammon...
    Maintenant, qu'il marche, j'essaye de le rendre plus beau et de lui donner vite fait un petit aspect 3D...

    pour ca, je dois calculer la dimension et la position de mes images a placer...
    je définit le style par la syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monElem.style.attrib = valeur
    Tout ca marche bien sauf que, le temps de calculer tout ca, je me retrouve avec mes images à la queue leu-leu dans un coin de mon div, pendant un temps, certes, très court mais suffisant pour m'énerver...

    Connaissez vous un moyen de contourner cela
    Ca m'étonnerait que ca existe, mais une fonction qui freeze l'affichage le temps de tout calculer serait l'idéal...

    Si ce sujet vous inspire n'hésitez pas à me faire part de vos idées...

    Merci et bon weekend

    EDIT:
    cela pourrait-il venir selon vous que mes images cliquables sont englobées dans des liens où c'est le href qui définit l'action j'avascript à effectuer?
    J'ai fait cela car je n'arrivait pas à définir l'événement onclick en y passant une fonction avec des paramètres et qui marche avec tous les navigateurs que j'ai sous la main. (IE6, FF1.5 et Opéra8)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,

    avant le calcul (ou au début de la fonction) tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    image.style.visibility = "hidden";
    et après le calcul voire même à la fin de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     image.style.visibility = "visible";
    tu peux voir également avec style.display="none" et "block" mais je ne suis pas sûr que tu puisses calculer les positions des éléments si ceux-ci sont à none (car absents de la page). Avec visibility="hidden" les éléments sont dans la page mais cachés.

    J'ai fait cela car je n'arrivait pas à définir l'événement onclick en y passant une fonction avec des paramètres et qui marche avec tous les navigateurs que j'ai sous la main.
    Normalement ceci ne devrait pas poser de problème quelque soit le navigateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img onclick="Fonction(param1, param2)">

  3. #3
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    yo,

    alors voilà, ta technique me semble simple et bonne.
    J'ai toujours un scintillement, mais au moins je n'ai pas les images qui se courent après le temps du calcul...
    Le problème vient du fait que j'efface toutes mes images. Je calcule ce qu'il faut pour afficher les nouvelles et seulement ensuite, je les affiche...
    Le résultat ne m'étonne donc pas et j'assume.

    Pour le coup du onclick, vu que je crée mes images a partir du DOM, il me semble que je n'ai pas le choix de définir ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myImg.onclick = la fonction
    donc pour les paramètres, ca passe pas (sauf sous opéra 8)
    d'ailleurs en parlant d'opéra, j'ai remarqué que même avant l'amélioration que tu m'as suggérée, il n'y avait pas le moindre scintillement

    C'est pas pour lancer des trolls et cie mais je trouve que opéra est un très bon browser...
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myImg.onclick =function(){ la fonction  }
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    salut, c'est plus vraiment dans le sujet mais c'est vrai que c'est moi qui ai commencé à en parler...
    Au début, j'avais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myImg.onclick = 'backGammon.selectFleche(' + i + ')';
    ca passait sous opéra mais pas ailleurs...
    par contre dans le href d'un lien pas de souci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myLink.href = 'javascript:void(backGammon.selectFleche(' + i + '));';
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myImg.onclick = function(){backGammon.selectFleche(i)};
    mais je pense que tu auras un problème avec le i ... il te faudra faire une attribution dynamique d'attribut ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    ta technique me semble simple et bonne.
    J'ai toujours un scintillement, mais au moins je n'ai pas les images qui se courent après le temps du calcul...
    et si tu mettais un visibility="hidden" pour toutes tes images lors du chargement de la page ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img{visibility: hidden}
    puis tu mets visibility="visible" après le calcul et uniquement pour l'image que tu as choisi de placer dans le jeu (elles doivent toutes porter un identifiant unique).

  8. #8
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Points : 3 264
    Points
    3 264
    Par défaut
    et si tu mettais un visibility="hidden" pour toutes tes images lors du chargement de la page ?

    Code :

    img{visibility: hidden}

    puis tu mets visibility="visible" après le calcul et uniquement pour l'image que tu as choisi de placer dans le jeu (elles doivent toutes porter un identifiant unique).
    oui oui,

    C'est à peu près ce que je fait...
    En gros, je crée mon noeud img, je définit la visibilité ainsi que tous les attributs qui m'interessent (largeur, top et left)...

    je met l'image dans un tableau (javascript) puis seulement ensuite, je rajoute mon noeud au document...

    en fin de fonction, je parcours mon tableau et je passe tout a visible...

    Le souci, de toutes facons, vient que le jeu n'est pas très optimisé...
    j'ai mes pions (30) dans une div, et quand je réactualises, je vire tout et je recalcule tout (même ce qui n'a pas bougé)...
    Donc ca doit etre normal que ca prenne un peu de temps....
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2008, 09h54
  2. Réponses: 1
    Dernier message: 03/03/2008, 09h56
  3. Eviter le scintillement lors du rafraîchissement
    Par netsabes dans le forum Delphi
    Réponses: 9
    Dernier message: 11/05/2007, 16h26
  4. Appeler une méthode lors d'un ENTER avec javascript
    Par shirya dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/01/2007, 21h32
  5. Appeler une classe CSS avec Javascript
    Par p0Kep0K dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/02/2006, 14h50

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