Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JAVASCRIPT] Probléme avec le temps

Lors du rafrichissement de page le temps redevient initiale

Sujet résolu
    14 février 2010 à 18:04:28

    Bonjour,

    Bon j'ai un problème java-script, je précise je n'y connait rien au java :s, je suis plutôt php.

    Donc voilà le problème, ce script je l'utilise pour faire le décompte de temps de la création d'un vaisseau.

    Alors le problème, plutôt chiant c'est que lorsque l'on recharge la page au bout de 20 à 30 secondes cela varie parfois, et bien le temps de construction à l'unité revient au temps initial, par exemple

    Un vaisseau met 5 min et 35 secondes de construction. Je lance la construction, le compte à rebours et l'affichage du vaisseau en construction et imaginons qu'il reste 1 min et 20 secondes et que vous rafraichissez la page ou que vous allez sur une autre puis ensuite reveniez sur celle ci et que la construction est encore en cours et bien vous repartez à 5 min et 35 secondes ! Donc sa bloque toute la fil d'attente tant que vous n'avez finit le premier vaisseau

    Aide pour comprendre les variables :

    b_hangar_id_plus : c'est l'id du vaiseaux en construction pour ensuite restituer son nom
    pretty_time_b_hangar : Temps total de tout les vaisseaux

    les ligne suivante :
    c = new Array({c}''); //le temps de construction à l'unité
    b = new Array({b}''); //Leur nom
    a = new Array({a}''); //nombre de vaisseau à construire

    et ensuite tout les {texte}, c'est comme si c'été du texte donc n'y faite pas attention. Car je passe par un système de template et donc sa affiche en fonction de la langue ...

    Le fameux code : (attention il fait peur)
    <script  type="text/javascript">
    v  = new Date();
    p  = 0;
    g  = {b_hangar_id_plus};
    s  = 0;
    hs = 0;
    of = 1;
    c  = new Array({c}'');
    b  = new Array({b}'');
    a  = new Array({a}'');
    aa = '{completed}';
    
    function t() {
    	if ( hs == 0 ) {
    		xd();
    		hs = 1;
    	}
    	n = new Date();
    	s = c[p] - g - Math.round((n.getTime() - v.getTime()) / 1000.);
    	s = Math.round(s);
    	m = 0;
    	h = 0;
    	if ( s < 0 ) {
    		a[p]--;
    		xd();
    		if ( a[p] <= 0 ) {
    			p++;
    			xd();
    		}
    		g = 0;
    		v = new Date();
    		s = 0;
    	}
    	if ( s > 59 ) {
    		m = Math.floor(s / 60);
    		s = s - m * 60;
    	}
    	if ( m > 59 ) {
    		h = Math.floor(m / 60);
    		m = m - h * 60;
    	}
    	if ( s < 10 ) {
    		s = "0" + s;
        }
        if (m < 10) {
          m = "0" + m;
    	}
    	if ( p > b.length - 2 ) {
    		document.getElementById("bx").innerHTML=aa ;
        } else {
    		document.getElementById("bx").innerHTML=b[p]+" "+h+":"+m+":"+s;
        }
    	window.setTimeout("t();", 200);
    }
    
    function xd() {
    	while (document.Atr.auftr.length > 0) {
    		document.Atr.auftr.options[document.Atr.auftr.length-1] = null;
    	}
    	if ( p > b.length - 2 ) {
    		document.Atr.auftr.options[document.Atr.auftr.length] = new Option(aa);
    	}
    	for ( iv = p; iv <= b.length - 2; iv++ ) {
    		if ( a[iv] < 2 ) {
    			ae = " ";
    		} else {
    			ae = " ";
    		}
    		if ( iv == p ) {
    			act = " ({in_working})";
    		} else {
    			act = "";
    		}
    		document.Atr.auftr.options[document.Atr.auftr.length] = new Option( a[iv] + ae + " \"" + b[iv] + "\"" + act, iv + of );
    	}
    }
    
    window.onload = t;
    </script>
    


    J'espère que vous m'aiderez car là j'ai plus beaucoup de cheveux
    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2010 à 19:18:58

      Le javascript n'est pas persistant dès que tu quittes la page (rechargement, fermeture, ou changement de page) les données sont effacées et les fonctions en cours arrêtées.

      Si tu souhaites les garder, soit tu utilises les cookies soit tu les enregistres sur le serveur (avec un appel AJAX par exemple) et tu les restaureras au prochain appel de la page.

      PS: setTimeout fonctionne de cette manière: setTimeout(f,tmps); où tmps est le temps en millisecondes et f une référence à une fonction (il faut éviter l'utilisation d'une chaine de caractères cf tuto sur les bonnes pratiques)
      Donc ligne 53 il vaut mieux écrire: window.setTimeout(t, 200);
      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2010 à 20:35:46

        ok, mais comme le je l'ai dit je développe en php et je ne connait pas du tout java !
        ajax je connait mais vite fait, sinon j'utilise un système de cookie pour l'identification de les joueurs, donc il y a peut être moyen, mais je connait pas les fonction et tout de ajax, ni quoi que ce soit dailleur :'(

        Si quelqu'un à des propositions de codes, via cookie ou autre je veut bien !
        • Partager sur Facebook
        • Partager sur Twitter

        [JAVASCRIPT] Probléme avec le temps

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown