Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    PER ESPERTI:Problema script SetTimeOut

    Ciao a tutti... ho un problemone..
    Ho qualcosa di simile a questo..

    codice:
    function miafunzione(){
      // blah blah;
      setTimeout('miafunzione()',0); // richiamo ciclico
    }
    setTimeout('miafunzione()',0); // richiamo la prima volta
    ovviamente "miafunzione" è qualcosa di più "pesante"... questo script però man mano passa il tempo mi occupa sempre più memoria fino a "crasharmi" il browser (firefox)...
    Come mai?? Ho dimenticato qualcosa??

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649

    Re: PER ESPERTI:Problema script SetTimeOut

    un setTimeout a 0 non ha senso

    se vuoi venire un minimo incontro alla macchina serve una temporizzazione maggiore
    (prova 50)

    poi
    Originariamente inviato da Nick.ferro
    // blah blah;
    qualcosa di più "pesante"...
    se entri nei dettagli si puo' vedere se c'e' qualcosa da ottimizzare

  3. #3
    Hai ragione... quello che voglio è fare partire un div dall'alto, farlo scendere e in fondo alla pagina riportarlo in cima..

    codice:
    function miafunzione(){
      // blah blah;
      if(parseInt(document.getElementById("prova").style.marginTop)>500)
      	document.getElementById("prova").style.marginTop = '0px';
    	else
    		document.getElementById("prova").style.marginTop = parseInt(document.getElementById("prova").style.marginTop) + parseInt(1) + 'px';
      setTimeout('miafunzione()',50); // richiamo ciclico
    }
    setTimeout('miafunzione()',50); // richiamo la prima volta
    Diciamo che questo è semplificato... io alla mia funzione passo i parametri per generalizzarla in modo che poi posso richiamarla piu volte nella mia pagina e su piu div...

  4. #4

  5. #5
    Primo: usa setInterval
    Secondo: controllare ogni volta lo stile dell'elemento non ha senso, conserva il valore in una var.
    Terzo: la referenza all'oggetto prova lo devi prendere una volta e basta...

    codice:
    function miafunzione(){
      // blah blah;
      var margin = 0, //Valore iniziale del margin
           s = document.getElementById("prova").style,
           i = setInterval(function() {
             if(margin > 500) {
               clearInterval(i);
      	   s.marginTop = '0px';
             }
    	 else
    	   s.marginTop = ++margin + "px"; 
           }, 50);
    }

    Attento che non ho verificato, incrocia le dita

  6. #6
    Dici che sia tutto questo che mi da problemi???
    Provo a farlo.. ti saprò dire =)...
    Poi come mai è meglio setInterval piuttosto che SetTimeout?

  7. #7
    con setInterval non hai bisogno ogni volta di creare un timeout, quindi ci guadagni in termini di prestazioni e semplicità.

    In ogni caso non è certo questo che ti dava problemi, è solo un piccolo ritocco.
    I veri problemi sono gli altri due.

  8. #8
    Ok sembra essere migliorato... ultima domanda...

    Il clearInterval(i); mi "blocca" il mio SetInterval.. a me però servirebbe fare un semplice stop dell'interval sul onmouseover e ripristinarlo sul onmouseout.. esiste un metodo che fa un wait o sleep??

  9. #9
    codice:
    function miafunzione(delay){
    	function move(){
    		if(margin > 500) {
    			clearInterval(i);
    			s.marginTop = '0px';
    		}
    		else
    			s.marginTop = ++margin + "px"; 
    	};
    	var	margin = 0,
    		element  = document.getElementById("prova"),
    		s = element.style,
    		i = setInterval(move, delay || 50);
    	element.onmouseover = function(){clearInterval(i);};
    	element.onmouseout = function(){i = setInterval(move, delay || 50);};
    };
    [OT] PER ESPERTI ... srivere PER ESPERTI in un topic sembra quasi si dia per scontato di esserlo, ma per qualche motivo serve un aiuto ... siccome il 99% delle volte che lo scrivono il codice fa presumere che l'autore del post NON SIA AFFATTO ESPERTO, non capisco perchè ciclicamente qualcuno apre posts con questo prefisso ... scusa il commento

    P.S. la funzione è setTimeout, e NON SetTimeOut
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    Tralasciando il tuo commento (non lo condivido affatto.. era per il semplice fatto che per risolvere tale problema su prestazioni di uno script, non si può sapere solo javascript, ma bisogna conoscerlo affondo, cosa che io non so).
    Cosa è il delay che usi in interval??
    Non esiste proprio un modo che di wait(i) continue(i)???

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.