Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Dopo onresize fai "qualcosa" con ritardo

    Ciao ,
    ad ogni resize della pagine vorrei eseguire del codice.. e fin qui niente di strano. Il problema è che la versione finale dello script (per adesso sono solo prove) caricherà una pagina php con una query pesantuccia.. quindi non voglio che esegue la query ogni minimo spostamento drag 'n drop ma che abbia un leggero ritardo..
    Ora sto provando su Mozilla, ho provato in diversi modi.. questo è uno di quelli che funziona meglio ma quando ridimensiono la finestra draggando l'angolo del browser escono quasi sempre due alert (= due query) prima che abbia finito di ridimensionare..

    codice:
    time = true;
    function startDelay() {
    	
    	if (time) {
    
    		alert("Questo funziona?");
    		time = false;
    		
    	}
    
    	me = setInterval(stopDelay, 30);
    	
    }
    
    function stopDelay() {
    	
    	clearInterval(me);
    	time = true;
    	
    }
    
    window.onresize = startDelay;
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Un ritardo singolo devi farlo con setTimeout(), non con setInterval();


    inoltre 30 millisecondi mi sembrano un po' pochi per apprezzare il risultato.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    I 30 millisecondi sono un rimasuglio dei test.. Ho provato con
    codice:
    setTimeout(stopDelay, 3000);
    ma continua ad avere quel tipo di problema.. non so se è colpa di Mozilla o c'è qualcosa nello script che non funziona troppo bene. Se clicco sul pulsante ridimensiona della finestra funziona bene, altrimenti escomo + alert..

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Devi anche definire una variabile dove salvare il Timeout (e forse resettarlo prima di ridefinirlo)
    codice:
    var time = true; // queste due definizioni DEVONO stare fuori dalle funzioni
    var me;
    
    function startDelay() {
      // clearTimeout(me); // non so se questo e` necessario
      if (time) {
        alert("Questo funziona?");
        time = false;	
      }
      me = setTimeout('stopDelay()', 3000);
    }
    
    function stopDelay() {
      time = true;	
    }
    In alternativa, si puo` eliminare la funzione stopDelay e inserire il settaggio della variabile nel setTimeout:

    me = setTimeout('time=true', 3000);


    Il setTimeout io lo ho sempre usato con la chiamata alla funzione tra virgolette, anche se, stando alle specifiche, la tua sintassi e` corretta.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Adesso sto provando con queste modifiche, funziona meglio anche se non mi sembra che rispetti sempre i 2 secondi.. tampo il tempo poi dovrò abbassarlo perchè devo dividere lo spazio ottenuto dopo il resize per creare una tabella e due secondi sono tanti..
    codice:
    time = true;
    
    function startDelay() {
    	
    	if (time) {
    
    		alert("Questo funziona?");
    		time = false;
    		
    	}
    
    	me = setTimeout(stopDelay, 2000);
    	
    }
    
    function stopDelay() {
    	
    
    	clearTimeout(me);
    	time = true;
    	
    }
    window.onresize = startDelay;
    Non avevo ancora visto la tua risposta, adesso provo.. grazie!

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Intanto ti consiglio di evitare definizioni implicite (senza il var davanti) e di definire "me" fuori dalle funzioni (serve per non avere sorprese con qualche browser).

    Poi non ho capito il motivo della variabile time.
    Ho riletto il primo post, e mipare che a te serva qualcosa di questo tipo:
    codice:
    var me; // da definire fuori
    function startDelay() {	
      clearTimeout(me); // non so se serve
      me = setTimeout('inviaform()', 2000);
    }
    dove la funzione inviaform() fa il contatto con il server.

    Questo se viene continuamente richiamato non invia nulla; passati i due secondi invia qualcosa.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Grazie per le spiegazioni tecniche.. ne ho bisogno, javascript faccio fatica a mandarlo giù (funziona su un browser e non sull'altro.. a volte funziona con un return davanti a qualcosa oppure una funziona va bene se la scrivo tipo miafunz e non miafunz()..), sono regole che non ho ancora capito anche perchè non lo utilizzavo molto mentre adesso devo realizzare un'applicazione che dovrà girare su Sun al pari di una che gira su Win scritta in VB.. da qui la gestione di finestre, timer &C.

    Effettivamente bastava la tua funzione (devo provarla su IE)! Grazie.

    Posso chiederti ancora una cosa? In realtà quello che dovrà essere "aggiornato" sarà un solo frame di una pop-up (è ancora da decidere ma molto probabilmente sarà così..), mi basta dare nome al frame e fare l'onresize su esso? Grazie.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    per la prima parte, ti consiglio una lettrua sistematica di un tutorial JS (quello di HTML.it non e` male).

    Originariamente inviato da Marco1980
    Posso chiederti ancora una cosa? In realtà quello che dovrà essere "aggiornato" sarà un solo frame di una pop-up (è ancora da decidere ma molto probabilmente sarà così..), mi basta dare nome al frame e fare l'onresize su esso? Grazie.
    Si puo` aggiornare solo un frame. La sintassi (da JS) e` all'incirca:

    parent.NOMEFRAME.location.reload();

    La sintassi esatta dipende dalla posizione relativa dei due frame (quello dove sta il JS e quello di destinazione)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Ok, adesso ho provato con
    codice:
    top.NOMEFRAME.location.reload()
    e sembra funziona.. grazie! Provo tutto su IE. Ciao

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.