io ho una funzione f1 e una f2
come blocco l'esecuzione di f2 quando chiamo f1?
io ho una funzione f1 e una f2
come blocco l'esecuzione di f2 quando chiamo f1?
Totò, vero ma strano
www.ateicos.com
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
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
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
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
ho pure messo che mostra i valori dei colori in dei textfield in modo da capire che succede...
<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>
Totò, vero ma strano
www.ateicos.com
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
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?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.
oppure mi consigli un'altra strategia?
Totò, vero ma strano
www.ateicos.com
ma in questo modo non bloccherei il fade sugli altri bottoni?Originariamente inviato da Mich_
Devi introdurre un parametro in piu`, che ti dice quale e` l'ultimo bottone cliccato.
Totò, vero ma strano
www.ateicos.com
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