Visualizzazione dei risultati da 1 a 9 su 9

Discussione: terminare una funzione

  1. #1

    terminare una funzione

    io ho una funzione f1 e una f2

    come blocco l'esecuzione di f2 quando chiamo f1?
    Totò, vero ma strano
    www.ateicos.com

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se devi chiamare f2() dall'interno di f1(), hai due possibilita`:

    PRIMA:
    function f1() {
    ...
    ...
    f2();
    return;
    }

    function f1() {
    ...
    ...
    if (...) {
    f2();
    return;
    } else {
    ...
    }

    SECONDA:
    function f1() {
    ...
    ...
    return f2();
    }

    Nel primo modo il codice di ritorno e` fissato dalla f1(), nel secondo viene riportato quello di f2()

    Spero di aver caito giusto la domanda.

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3

    :\

    le funzioni sono separate,

    f1(id,n) { };
    f2(id,n) { };

    quando parte f2 dovrebbe terminare f1,
    quando parte f1 dovrebbe terminare f2
    Totò, vero ma strano
    www.ateicos.com

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Scusa, avevo capito tutta un'altra cosa...

    Pero` dovresti spiegare meglio.

    Hai due funzioni che fanno un'opearazione lunga ciascuna...
    C'e` dentro un loop (quasi) infinito?
    C'e` una chiamata ricorsiva?
    Come le chiami? tramite dei click?
    Stai lavorando in Javascript?
    Ma le funzioni non bloccano il browser?

    Come vedi ne so troppo poco per poter azzardare una soluzione....

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    http://www.favara.it/public/home/js.asp

    a questo indirizzo trovi la pagina di prova.

    come vedi tutto funziona bene quando il mouse entra piano ed esce piano, ma quando si verifica che il mouse si muove velocemente il pulsante "lampeggia", per questo motivo intendo terminare una delle due funzioni quando parte l'altra.

    posto di seguito il codice




    <script language="JavaScript" type="text/javascript" >


    r_a1 = 255; g_a1 = 225; b_a1 = 255;
    ri_a1 = 132; gi_a1 = 0; bi_a1 = 0;
    r_a2 = 132; g_a2 = 0; b_a2 = 0;
    ri_a2 = 255; gi_a2 = 154; bi_a2 = 0;

    var rc_a1 = new Object; var gc_a1 = new Object; var bc_a1 = new Object; var oby_a1 = new Object;
    var rc_a2 = new Object; var gc_a2 = new Object; var bc_a2 = new Object; var oby_a2 = new Object;

    n_a1 =0;

    while ( n_a1 < 4 ) {
    rc_a1[n_a1] = r_a1; gc_a1[n_a1] = g_a1; bc_a1[n_a1] = b_a1;
    rc_a2[n_a1] = r_a2; gc_a2[n_a1] = g_a2; bc_a2[n_a1] = b_a2;
    n_a1 += 1;

    }

    function f1(id,n_a1){
    if ( ( rc_a1[n_a1] > 132 ) || ( gc_a1[n_a1] > 0 ) || ( bc_a1[n_a1] > 0 ) || ( rc_a2[n_a1] < 255 ) || ( gc_a2[n_a1] < 154 ) ) {
    if ( rc_a1[n_a1] <= 132 ) { rc_a1[n_a1] = 132; } else { rc_a1[n_a1] -= 11; };
    if ( gc_a1[n_a1] <= 0 ) { gc_a1[n_a1] = 0; } else { gc_a1[n_a1] -= 11; };
    if ( bc_a1[n_a1] <= 0 ) { bc_a1[n_a1] = 0; } else { bc_a1[n_a1] -= 11; };
    if ( rc_a2[n_a1] <= 255 ) { rc_a2[n_a1] = 255; } else { rc_a2[n_a1] += 11; };
    if ( gc_a2[n_a1] <= 154 ) { gc_a2[n_a1] = 154; } else { gc_a2[n_a1] += 11; };

    if ( bc_a1[n_a1] == -9 ) { bc_a1[n_a1] = 0; };

    bc_a2[n_a1] = 0;

    document.getElementById(id).style.color="rgb("+ rc_a1[n_a1] +","+ gc_a1[n_a1] +","+ bc_a1[n_a1] +")";
    document.getElementById(id).style.background="rgb( "+ rc_a2[n_a1] +","+ gc_a2[n_a1] +","+ bc_a2[n_a1] +")";
    setTimeout("f1('"+id+"',"+n_a1+")",40); }; };

    function f2(id,n_a1){
    if ( ( rc_a1[n_a1] < 255 ) || ( gc_a1[n_a1] < 255 ) || ( bc_a1[n_a1] < 255 ) || ( rc_a2[n_a1] > 132 ) || ( gc_a2[n_a1] > 0 ) ) {
    if ( rc_a1[n_a1] >= 255 ) { rc_a1[n_a1] = 255; } else { rc_a1[n_a1] += 11; };
    if ( gc_a1[n_a1] >= 255 ) { gc_a1[n_a1] = 255; } else { gc_a1[n_a1] += 11; };
    if ( bc_a1[n_a1] >= 255 ) { bc_a1[n_a1] = 255; } else { bc_a1[n_a1] += 11; };
    if ( rc_a2[n_a1] <= 132 ) { rc_a2[n_a1] = 132; } else { rc_a2[n_a1] -= 11; };
    if ( gc_a2[n_a1] <= 0 ) { gc_a2[n_a1] = 0; } else { gc_a2[n_a1] -= 11; };

    bc_a2[n_a1] = 0;

    document.getElementById(id).style.color="rgb("+ rc_a1[n_a1] +","+ gc_a1[n_a1] +","+ bc_a1[n_a1] +")";
    document.getElementById(id).style.background="rgb( "+ rc_a2[n_a1] +","+ gc_a2[n_a1] +","+ bc_a2[n_a1] +")";
    setTimeout("f2('"+id+"',"+n_a1+")",40); }; };

    </script>


    <button class="b1" id="lb10"
    onclick="document.location='%2Fpublic%2Fhome%2F'"

    onMouseOver="f1('lb10',0);"
    onFocus="f1('lb10',0);"

    onMouseOut="f2('lb10',0);"
    onBlur="f2('lb10',0);"

    title=" torna alla home page " >HOME</button>
    ho pure messo che mostra i valori dei colori in dei textfield in modo da capire che succede...
    Totò, vero ma strano
    www.ateicos.com

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non ho analizzato tutto il codice, ma ho capito qualcosa delle cose che ti avevo chiesto:

    > C'e` dentro un loop (quasi) infinito?
    No, ma c'e` una chiamata ricorsiva tramite setTimeout

    > C'e` una chiamata ricorsiva?
    vedi sopra

    > Come le chiami? tramite dei click?
    Da come sono fatte, direi di si`

    > Stai lavorando in Javascript?
    Si`

    > Ma le funzioni non bloccano il browser?
    No, dato che non sono funzioni continue, ma sono chiamate ricorsivamente.

    Stai tranquillo il tuo problema e` facimente risolvibile.

    Tu non vuoi bloccare la funzione, ma vuoi bloccare il richiamo ricorsivo della funzione.

    Devi introdurre un parametro in piu`, che ti dice quale e` l'ultimo bottone cliccato.

    Non so se sono riuscito a spiegarmi. Comunque se hai capito, puoi prosegure da solo, altrimenti dovresti postare il codice HTML contenente gli eventi che scatenano ciascuna funzione (e` troppo complesso spiegare come modificarlo, e` piu` semplice falo vedere sul tuo esempio).

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Tu non vuoi bloccare la funzione, ma vuoi bloccare il richiamo ricorsivo della funzione.

    Devi introdurre un parametro in piu`, che ti dice quale e` l'ultimo bottone cliccato.
    quindi dovrei creare un nuovo oggetto con n elementi quanti i bottoni a cui dare un valore che "accenda" o "spenga" le funzioni inerenti i bottoni?

    oppure mi consigli un'altra strategia?
    Totò, vero ma strano
    www.ateicos.com

  8. #8
    Originariamente inviato da Mich_
    Devi introdurre un parametro in piu`, che ti dice quale e` l'ultimo bottone cliccato.
    ma in questo modo non bloccherei il fade sugli altri bottoni?
    Totò, vero ma strano
    www.ateicos.com

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Mi pare di capire che le due funzioni sono mutualmente escludentesi, quindi userei una sola variabile (io la chiamo flag), che:
    - inizialmente e` a 0 (o -1);
    - viene settata a 1 dalla chiamata alla funzione f1;
    - viene settata a 2 dalla chiamata alla funzione f2;
    - ...

    Poi in ogni funzione fai partire il setTimeout SOLO se il flag e` corretto:
    Nella funzione f1:
    if(flag==1) setTimeout("f1('"+id+"',"+n_a1+")",40);

    Nella funzione f2:
    if(flag==2) setTimeout(...);


    Vedi se questo va bene. In realta` ti porta un certo ritardo nella risposta, dato che la prima chiamata alla funzione sbagliata la fa comunque, prima di sospendere.
    Altrimenti si puo` lavorare con il clrTimeout().

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.