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 :

[POO] Optimisation de code pour défilement vertical de div


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut [POO] Optimisation de code pour défilement vertical de div
    Bonjour, je cherche à réaliser un effet de div défilant verticalement pour afficher des actualités. J'ai donc trouvé un script qui me permet de faire ça, mais à chaque fois que j'affiche la page je sens mon pc qui tourne à fond, comme si le code utilisait bcp de ressources.

    C'est pourquoi je souhaiterais avoir votre avis sur la façon dont je fais scroller mon contenu, si il y a mieux, plus optimisé, plus simple ...

    1. Ma fonction est appelée au chargement de la page comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onLoad="InitObjet('scroll_actu')">
    2. Voici le code de la fonction :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    var bas_de_page=220;      // Position en bas de fenetre
    var Hauteur=250;         //Hauteur du div   
    var pos_x=0;            //Position du div (horizontal)
    var pos_y=0;    //Position du div (vertical)
    var MonObjet;
     
    function GetObject(ID) {
       if (document.getElementById) {
          return document.getElementById(ID);
       }
       if (document.layers) {
          return eval('document.'+ID);
       }
       if (document.all) {
          return eval('document.all.'+ID);
       }
    }
     
    function InitObjet(ID) {            //Initialisation du DIV
       MonObjet = GetObject(ID);
       MoveTo(MonObjet, pos_x, bas_de_page);
       scroll();
    }
     
    function MoveTo(MyObject, x, y) {   // Déplacement du DIV
       if (document.getElementById||document.all) {
          MyObject.style.left = x + "px";
          MyObject.style.top = y + "px";
          return;
       }
       if (document.layers) MyObject.moveTo(x, y);
    }
     
    function scroll() {                  // Défilement du DIV
       if (pos_y > (-1 * Hauteur)) {      //Teste si le DIV est complètement sorti
          pos_y--;
          MoveTo(MonObjet, pos_x, pos_y)
       }
       else {
          pos_y=bas_de_page;
          MoveTo(MonObjet, pos_x, pos_y)
       }
       var timer = setTimeout('scroll();',20);
    }
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    peut-être scroll() est-elle interprétée comme la bonne vieille méthode de window;

    du coup, le timer fait double emploi et c'est le dawa;

    essaie de changer le nom de cette fonction;

  3. #3
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    lol javatwister ^^ , si c'était le cas il y aurait une plante

    le pourquoi du comment =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var timer = setTimeout('scroll();',20);
    appelé toute les 20 millisecondes, va surcharger ton processeur.
    de plus tu assignes ton setTimeout mais tu ne le tue jamais ( pas grave dans notre situation car tu fais un appel récursif sur ta méthodes ... )

    petit conseil : fait une méthode te permettant de calculer la hauteur de ton conteneur et en déplaçant le contenu via la propriété top plutôt que le scroll, un exemple de ton code html ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    petit conseil : fait une méthode te permettant de calculer la hauteur de ton conteneur et en déplaçant le contenu via la propriété top plutôt que le scroll, un exemple de ton code html ?
    La hauteur de mon conteneur est fixée par une propriété CSS ! Le code de mon conteneur + div qui scrolle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <p class="titre_actualites">ACTUALIT&Eacute;S</p>
    	<div class="conteneur">
    		<div id="scroll_actu" class="txt_actualites">
    		<?php
                    $varN=1;
                    while ($varNtotal = mysql_fetch_array($varActualites) ) {
                            $annee = substr($varNtotal['dat'], 0, 4);
                            $mois = substr($varNtotal['dat'], 5, 2);
                            $jour = substr($varNtotal['dat'], 8, 2); ?>
    			<?php echo $jour . '-' . $mois . '-' . $annee; ?> :<br />
    			<a href="index.php?page=actualités&id=#<?php echo $varNtotal['id']; ?>"><?php echo $varNtotal['titre']; ?></a><br /><br />
    		<?php } ?>
    		</div>
    </div>
    avec les codes CSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #c_accueil_actu .conteneur {
    	position: absolute;
    	top: 60px;
    	left: 20px;
    	width: 183px;
    	height: 223px;
    	overflow: hidden;
    	}
     
    #c_accueil_actu .txt_actualites {
    	position: relative;
    	text-align: justify;
    	}

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Oui effectivement il appelle l'objet dans la fonction. Cet objet n'est pas présent dans les autres pages, donc il ne le trouve pas et retourne une erreur...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Non apparemment ça ne change rien. De plus, j'ai une erreur javascript lorsque je vais sur d'autres pages, il me dit :

    MyObject is Null
    au niveau de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function MoveTo(MyObject, x, y) {   // Déplacement du DIV
       if (document.getElementById||document.all) {
          MyObject.style.left = x + "px";
          MyObject.style.top = y + "px";
          return;
       }
       if (document.layers) MyObject.moveTo(x, y);
    }
    J'ai oublié de préciser que mon site est construit sur un modèle de conteneur dynamique, avec le header, le menu et le footer fixes, et un conteneur qui m'affiche les différentes pages. Donc le onload est appelé à chaque changement de pages !! Je viens de m'en rendre compte...

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    ah oui quand même...

    d'où l'intérêt d'un killTimeout()

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    clearTimeout() même si le sens est le même

    A+

  9. #9
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function MoveTo(MyObject, x, y) {   // Déplacement du DIV
       if (document.getElementById||document.all) {
          MyObject.style.left = x + "px";
          MyObject.style.top = y + "px";
          return;
       }
       if (document.layers) MyObject.moveTo(x, y);
    }
    je te laisse analyser .....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fonction : MoveTo(MyObject, x, y)
    appel de ta méthode :


Discussions similaires

  1. [MySQL] Optimisation de code pour un débutant
    Par neospirit dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/02/2011, 14h05
  2. optimisation du code pour des combobox
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/03/2008, 13h30
  3. Réponses: 0
    Dernier message: 29/08/2007, 16h57
  4. Optimiser un code pour éviter " out of memory"
    Par risack dans le forum MATLAB
    Réponses: 16
    Dernier message: 19/03/2007, 09h36
  5. Réponses: 8
    Dernier message: 14/09/2006, 16h43

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