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 :

La vitesse de defilement s'augmente !


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 373
    Par défaut La vitesse de defilement s'augmente !
    Bonjour à tous,

    J'ai fait un texte qui se récupere par Ajax en temps actuel, en plus il se défile.
    Mais le problème, c'est que le défilement s'augmente au cours du temps.

    Voilà mon code:

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
     
     
    <html>
    	<head>
    		<title>Ajax-Asp</title>
    		<link href="style_texte.css" rel="stylesheet" type="text/css" />
     
    		<!---------------------------->
    		<SCRIPT LANGUAGE="JavaScript">
     
    		var msg;
    		var index=0;
    		var delay=10;
     
    		function defil() {
     
    			var nb_char=msg.length;
    			index++;
    			if (index>nb_char) index=0;
    			document.formmenu.valeur.value=msg.substring(index)+msg;
    			setTimeout("defil()",delay);
    		}
     
    		function defiler(txt,tps) {
     
    			msg=txt + "   -   ";
    			delay=tps;
    			defil();
    		}
     
    				//============================
     
    				function verificationMenu()
    				{
    				texte = go();
    				setTimeout("verificationMenu()",3000);
    				}
     
     
    	 		function getXhr(){
                           var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } catch (e) {
    			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			            }
    				}
    				else { // XMLHttpRequest non supporté par le navigateur 
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    				   xhr = false; 
    				} 
                                    return xhr
    			}
     
    			/**
    			* *******************************************
    			*/
    			function go(){
    				var xhr = getXhr()
    				xhr.onreadystatechange = function(){
    					if(xhr.readyState == 4 && xhr.status == 200){
    						document.formmenu.valeur.value=xhr.responseText;
    						defiler(xhr.responseText,200);
    						return(xhr.responseText);
    					}
    				}
     
    			//-------------
    			var date = new Date();
    			var myurl = "ajax.asp?" +  date.getTime();
    			xhr.open("GET",myurl,true);	
    			//-------------
    			xhr.send(null);
    			}
     
    		</script>
    	    <link href="style_texte.css" rel="stylesheet" type="text/css">
    	</head>
    	<body onLoad=verificationMenu();>
    		<form name="formmenu" action="" methode="GET" onSubmit="">
    		   <center><input name="valeur" type="text" class="ajax" size="70">
    		   </center>
        </form>
     
    	</body>
    </html>
    Comment résoudre ce problème ?

    Et merci d'avance.

  2. #2
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Je crois que le probleme vient de l appel recursif de defil() en conjonction avec l appel dans la réponse http de defiler()
    du coup ça va crée a chaque appel de defiler() une nouvelle appel recursif infini sur defil();. Par consequent il va avoir de plus en plus d'appel par seconde à cette fonction.

    Ai je été clair ?

  3. #3
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Citation Envoyé par magnus2005
    Je crois que le probleme vient de l appel recursif de defil() en conjonction avec l appel dans la réponse http de defiler()
    du coup ça va crée a chaque appel de defiler() une nouvelle appel recursif infini sur defil();

    Ai je été clair ?
    +1

    En tout cas moi j'ai compris

  4. #4
    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
    dans la fonction defil(), donne un nom à ton timer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timer=setTimeout("defil()",delay);
    après avoir déclaré la variable timer à false, par exemple, ailleurs dans le code;

    puis, dans ta fonction go(), avant d'appeler defiler(), tu arrêtes le timer en cours:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(timer){clearTimeout(timer)}
    ça devrait suffire;

Discussions similaires

  1. [Débutant] Remplacer un tableau 3D pour augmenter la vitesse
    Par NonoSC dans le forum C#
    Réponses: 24
    Dernier message: 14/12/2011, 01h34
  2. Réponses: 8
    Dernier message: 08/06/2011, 08h51
  3. Vitesse de defiler
    Par moukah2 dans le forum Débuter
    Réponses: 4
    Dernier message: 28/12/2007, 20h10
  4. [SWT] probleme de vitesse de defilement avec scrollComposite
    Par sylvainS63 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 25/10/2007, 17h03
  5. vitesse defilement molette de souris étrange
    Par zeurkk dans le forum Windows XP
    Réponses: 2
    Dernier message: 21/12/2005, 12h47

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