Visualizzazione dei risultati da 1 a 10 su 10

Discussione: bloccare una funzione

  1. #1

    bloccare una funzione

    ho un piccolo script che mi sfuma il colore del link quando ci vado sopra

    codice:
    function sfuma(idlink,dir){
    	if(dir=='in'){
    		document.getElementById(idlink).parentNode.style.backgroundImage='url(imagesGaggia/nav.png)';
    		document.getElementById(idlink).parentNode.style.backgroundRepeat='no-repeat';
    		var menu= new Fx.Tween(idlink,{duration:300});
    		menu.start('color', '#822');
    	}
    	if(dir=='out'){
    		document.getElementById(idlink).parentNode.style.backgroundImage='';
    		var menuu= new Fx.Tween(idlink,{duration:200});
    		menuu.start('color', '#000');
    	}
    }
    tutto bene apparentemente..però se tolgo il mouse rapidamente non riporta nero il colore..sembra quasi che fino a che non termini la chiamata precedente non possa fare la successiva..


    lo chiamo così:

    codice:
    [*]Appartamenti
    suggerimenti?

  2. #2
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Stai usando mootools o che?

    Perche se usi una lib allora e' meglio che la indichi senno nn si puo' sapere molto.

    Da quello che dici sembra che la funzioni di fade-in/out lavorino simultaneamente.

    Dovresti magari intercettare la var che tiene il timer e dargli un clearTimeout().
    Oppure usare l'apposito metodo fornito dalla lib.

  3. #3
    si uso mootools..ho dimenticato di dirlo..

    puoi spiegarmi meglio cosa intendi in "Dovresti magari intercettare la var che tiene il timer e dargli un clearTimeout()."?

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133

    Re: bloccare una funzione

    Originariamente inviato da ranza!!!123
    .....
    suggerimenti?
    Io Separerei le funzioni SfumaIn(){..............} SfumaOut(){..............}
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    pensa che l'originale erano le 2 funzioni..e per la disperazione le ho fuse sperando che richiamandola si interrompesse da sola..

    il problema c'è anche con le 2 funzioni

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Allora ferma tutto per fare quel genere di animazioni si usa il metodo

    setTimeout dell'oggetto window.
    E' praticamente una chiamata ricorsiva che viene terminata all'avverarsi di una particolare condizione.

    Tale chiamata genera una variabile intera che tiene traccia del thread in esecuzione.
    la funzione clearTimeout uccide tale thread e ferma la ricorsione . quindi devi vedere le lib che usi ti permettono di fare cio'.ù


    EDIT:
    Che lib stai usando??????

  7. #7
    Originariamente inviato da Virus_101
    Allora ferma tutto per fare quel genere di animazioni si usa il metodo

    setTimeout dell'oggetto window.
    E' praticamente una chiamata ricorsiva che viene terminata all'avverarsi di una particolare condizione.

    Tale chiamata genera una variabile intera che tiene traccia del thread in esecuzione.
    la funzione clearTimeout uccide tale thread e ferma la ricorsione . quindi devi vedere le lib che usi ti permettono di fare cio'.ù


    EDIT:
    Che lib stai usando??????
    si ho presente cos'è setTimeout, solo ke adesso mi sono impuntato sulle mootools e volevo risolvere..anche per curiosità personale!
    ho provato a mettere

    var menu=null;

    all'inizio in modo che se l'effetto di ingresso non è finito la variabile venga "distrutta" ma non riesco a risolvere..nemmeno mettendo

    document.getElementById(idlink).style.color='#000' ;

    cioè tornando al nero senza effetto riesco..fino a che non finisce la colorazione non mi permette di cambiare colore

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    ok allora avevo intuito bene che stai usando mootools.

    Allora il problema e' che te puoi fare quello che vuoi con lo stile del nodo in questione.
    Ma se l'effetto e' attivo siginfica che c'e' una procedurea threadizzata che viene costantemente eseguita fino al verificarsi del caso di terminazione. Questo avviene perche' nel js non fornisce un metodo/funzione di tipo sleep(10), ossia non c'e' la posibbilita' di sfruttare una funzione nativa del linguaggio che ti faccia mettere in attesa per qlke millisecondo l'esecuzione del ciclo. Da qui per genstire animazioni si genera un bel problema che il 90% delle lib e della gente risolve con la chiamata ricorsiva di window.setTimeout( [funzione] , millisecondi)

    Tale chiamata restituisce un intero, solitamente chiamato timer, che tiene traccia delle chiamate effettuate.

    faccio esempio

    Codice PHP:
    var posY =0;
    var 
    timer null;


    function 
    moveLeft(id)
    {

       
    elem document.getElementById(id);
       
    // interrompe l'animazione e riporta il div in pos di partenza
       
    if( timer!=null )
       {
           
    clearTimeout(timer);
           
    posY =0;
           
    elem.style.left=posY+"px";
           
    timer=null;       
       }

       
    // gestisce il caso di terminazione e l'animazione
       
    if( posY<200 )
       { 
    // muove il div da sx verso dx fino a che left<200
           
    posY += 10;
           
    elem.style.left=posY+"px";
           
    window.setTimeout'moveLeft( \''+id+'\' )' 500 );
       }
       else
       {
    //caso base della ricorsione . termina l'esecuzione dell'animazione e posiziona il div in pos finale
           
    posY =200;
           
    elem.style.left=posY+"px";
           
    clearTimeout(timer);
           
    timer=null;
       }


    }

    /*
    Ci sono molti modi migliori per fare cio' cmq era per fare un esempio
    */ 
    quindi se tu richiami la funzione essa gestira' autonomamente lo spostamento e la ripetizione dell'animazione sul div.

    A questo punto visto che usi le mootools devi appoggirati sui metodi che fornisce la libreria.
    E tu guarda caso esiste un metodo oggettoFX.cancel() che termina la transazione.

    Come nel 90% dei post che trovo qua noto che vi dimenticate costantemente di andare a guardare la documentazione fornita dalle libb che usate.
    Le mootols hanno una documentazione abb buona a rigurado sul loro sito, quindi ti consiglio vivamente di consultare la documentazione delle mootools che ti spiega tutto.

    Controlla meglio la pagina della documentazione di mootols. La ti spiegano come sono disposte le classi, chi eredita cosa e che attributi/metodi hai a disposizione.

  9. #9
    grazie per la "ramanzina" ho guardato bene la documentazione e ho visto che si può bloccare o come hai detto tu o con un parametro in fase di chiamata..per ora non riesco ma è solo questione di tempo!

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    :P

    Non era una ramanzina , Era piuttosto un suggerimento che spero ti torni utile.

    Cmq mmi sa che che a sto punto ti conviene usare un oggetto ppiu' astratto dell'oggetto fx.tween.

    qlkosa come l'ggetto fx generico che poi a settare o qlkosa del genere.
    Non ho lavorato molto su mootools cmq il concetto base e' quello.

    Spero di esserti stato d'aiuto.

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.