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

    Javascript: Cambiare valore Css

    Salve a tutti, io avrei un piccolo problema con Javascript:

    codice:
    <script type="text/javascript" src="http://poliglot.altervista.org/BlackFenix06/Utilita/menu.js"></script>
    <link rel="stylesheet" type="text/css" href="http://poliglot.altervista.org/BlackFenix06/Utilita/menu.css">
    <style type="text/css">
    <!-- 
    #img_1, #img_2, #img_3, #img_4, #img_5, #img_6, #img_7, #img_8, #img_9 {width: 120px; border: none; opacity: 1.0;}
    #td_img_1 {color: #FF0000; font-weight:bold; text-align: center; height: 87px;}
    -->
    </style>
    <script language="JavaScript" type="text/javascript">
    <!--
    opa_1 = 0;
    opa_2 = 0;
    opa_3 = 0;
    opa_4 = 0;
    opa_5 = 0;
    opa_6 = 0;
    opa_7 = 0;
    opa_8 = 0;
    opa_9 = 0;
    opak_1 = 10;
    opak_2 = 10;
    opak_3 = 10;
    opak_4 = 10;
    opak_5 = 10;
    opak_6 = 10;
    opak_7 = 10;
    opak_8 = 10;
    opak_9 = 10;
    function imgx_1() {
    if (opak_1==0) {
    document.getElementById("img_1").style.display = "none";
    document.getElementById("td_img_1").innerHTML="Homepage";
    setTimeout(imgy_1, 1000);
    }
    else {
    opak_1=opak_1-1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    setTimeout(imgx_1, 100);
    }
    }
    function imgy_1() {
    if (opak_1==10) {
    document.getElementById("img_1").style.display = "block";
    document.getElementById("td_img_1").innerHTML="";
    }
    else {
    opak_1=opak_1+1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    setTimeout(imgy_1, 100);
    }
    }
    //-->
    </script>
    <table class="tab_menu">
    <tr>
    <td id="td_img_1"><img src="http://files.blackfenix06.webnode.it/200000006-29e992ae2a/giphy.gif" onload="part(); loadtime()" onmousemove="imgx_1()" id="img_1"></td>
    </tr>
    <tr>
    <td><img src="http://files.blackfenix06.webnode.it/200000007-971f09815f/volpe_converted.gif" id="img_2"></td>
    </tr>
    <tr>
    <td><img src="http://files.blackfenix06.webnode.it/200000008-2e0e72f0cb/giphy%20p.gif" id="img_3"></td>
    </tr>
    <tr>
    <td><img src="http://files.blackfenix06.webnode.it/200000015-264be2744c/naruto_kyuubi_mode__gif__by_loganightlegend-d5sgk1m.gif" id="img_4"></td>
    </tr>
    <tr>
    <td><img src="http://files.blackfenix06.webnode.it/200000014-6d3816f2c8/giphy3.gif" id="img_5"></td>
    </tr>
    <tr>
    <td><img src="http://files.blackfenix06.webnode.it/200000012-aae7cabdf3/tumblr_ltwmjzOJqk1qjtzsdo1_500.gif" id="img_6"></td>
    </tr>
    <tr>
    <td><img src="http://files.blackfenix06.webnode.it/200000013-f404200d96/tumblr_mke5swzMMd1s5qslao1_500.gif" id="img_7"></td>
    </tr>
    <tr>
    <td><img src="http://files.blackfenix06.webnode.it/200000018-e29d3e397f/tumblr_nf6dxvCkKc1sial0xo3_500.gif" id="img_8"></td>
    </tr>
    <tr>
    <td><img src="http://files.blackfenix06.webnode.it/200000017-1c7f81d7a2/3079636105_1_3_Dr1LnjvV.gif" id="img_9"></td>
    </tr>
    <tr>
    <td id="clock"></td>
    </tr>
    </table>
    <table class="tab_agg">
    <tr>
    <td id="agg"></td>
    <td id="not"></td>
    </tr>
    </table>





    Il codice funziona perfettamente fino a uando deve fare questo:

    codice:
    function imgy_1() {
    if (opak_1==10) {
    document.getElementById("img_1").style.display = "block";
    document.getElementById("td_img_1").innerHTML="";
    }
    else {
    opak_1=opak_1+1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    setTimeout(imgy_1, 100);
    }
    }





    Usando gli allert ho notato che il codice si interrompe e quindi non viene eseguito quì:

    codice:
    document.getElementById("img_1").style.opacity = opa_1;





    Cosa devo fare per risolvere il problema? Purtroppo non sono riuscito a capire la causa e quindi mi affido al vostro aiuto

    PS: Questa parte:

    codice:
    opa_2 = 0;
    opa_3 = 0;
    opa_4 = 0;
    opa_5 = 0;
    opa_6 = 0;
    opa_7 = 0;
    opa_8 = 0;
    opa_9 = 0;
    opak_2 = 10;
    opak_3 = 10;
    opak_4 = 10;
    opak_5 = 10;
    opak_6 = 10;
    opak_7 = 10;
    opak_8 = 10;
    opak_9 = 10;
    Serve per le altre immagini all'interno della tabella
    Ultima modifica di BlackFenix06; 23-12-2014 a 16:19

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Se non spieghi cosa vuoi fare dubito che troverai soluzione, il codice è inutilmente ripetuto sia come variabili globali e come funzioni
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Hai pienamente ragione scusami XD
    Riporto il codice precedente postato con alcune modifiche che ho fatto nel mentre, togliendo anche alcune parti non utili al momento per il problema


    codice:
    <style type="text/css">
    <!-- 
    #img_1, #img_2, #img_3, #img_4, #img_5, #img_6, #img_7, #img_8, #img_9 {width: 120px; border: none; opacity: 1.0;}
    #td_img_1 {color: #FF0000; font-weight:bold; text-align: center; height: 87px;}
    -->
    </style>
    <script language="JavaScript" type="text/javascript">
    <!--
    opa_1 = 0;
    opak_1 = 10;
    txe=0;
    function imgx_1() {
    if (opak_1==0) {
    document.getElementById("img_1").style.display = "none";
    document.getElementById("td_img_1").innerHTML="Homepage";
    setTimeout(imgy_1, 1000);
    }
    else {
    opak_1=opak_1-1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    setTimeout(imgx_1, 100);
    }
    }
    function imgy_1() {
    if (opak_1==10) {
    txe=txe-1;
    }
    else {
    if (txe==0) {
    txe=txe+1;
    document.getElementById("img_1").style.display = "block";
    document.getElementById("td_img_1").innerHTML="";
    setTimeout(imgy_1, 100);
    }
    else {
    opak_1=opak_1+1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    setTimeout(imgy_1, 100);
    }
    }
    }
    //-->
    </script>
    <table class="tab_menu">
    <tr>
    <td id="td_img_1"><img src="http://files.blackfenix06.webnode.it/200000006-29e992ae2a/giphy.gif" onmousemove="imgx_1()" id="img_1"></td>
    </tr>
    </table>

    in poche parole:
    L'immagine (con id img_1) passandoci con il mouse sopra inizia gradualmente a scomparire.


    codice:
    opa_1 = 0;
    opak_1 = 10;
    function imgx_1() {
    if (opak_1==0) {
    document.getElementById("img_1").style.display = "none";
    document.getElementById("td_img_1").innerHTML="Homepage";
    setTimeout(imgy_1, 1000);
    }
    else {
    opak_1=opak_1-1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    setTimeout(imgx_1, 100);
    }

    Dopo aver richiamato la funzione imgx_1() viene controllato se la variabile opak_1 vale 0. Se non vale 0 allora a opak_1 viene tolto 1. Dopo viene assegnato alla variabile opa_1 il valore di opak_1 diviso dieci (questo perchè l'attributo CSS3 opacity ha numeri decimali che vanno da 0.0 a 1.0). Fatto ciò all'attributo opacity dell'immagine viene assegnato il valore di opa_1. La funzione viene ripetuta, grazie a un setTimeout, fino a quando la variabile opak_1 vale 0. Una volta che la variabile vale 0, l'immagine scompare modificando l'attributo display e appare la scritta Homepage. Un setTimeout dopo un secondo richiama la funzione imgy_1.


    codice:
    txe=0;
    function imgy_1() {
    if (opak_1==10) {
    txe=txe-1;
    }
    else {
    if (txe==0) {
    txe=txe+1;
    document.getElementById("td_img_1").innerHTML="";
    document.getElementById("img_1").style.display = "block";
    setTimeout(imgy_1, 100);
    }
    else {
    opak_1=opak_1+1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    setTimeout(imgy_1, 100);
    }
    }
    }

    Dopo aver richiamato la funzione imgy_1() viene controllato se la variabile opak_1 vale 10. Se non vale 10 allora viene controllato se la variabile txe vale 0. Se vale 0 allora a txe viene aggiunto 1 e il testo Homepage viene cancellato e l'immagine riappare modificando l'attributo display (anche se non è visibile). Fatto ciò un setTimeout fa ripartire la funzione imgy_1(). Ora che la variabile txe non vale più 0, alla variabile opak_1 (che vale 0) viene aggiunto 1. Dopo viene assegnato alla variabile opa_1 il valore di opak_1 diviso dieci. Fatto ciò all'attributo opacity dell'immagine viene assegnato il valore di opa_1. La funzione viene ripetuta, sempre grazie a un setTimeout, fino a quando la variabile opak_1 vale 10. Una volta che la variabile vale 10, l'immagine è di nuovo visibile e alla variabile txe viene tolto 1 (in modo da riportarla a 0).
    Così il ciclo riparte appena il mouse si muove di nuovo sopra l'immagine.

    Ora il problema è che il codice funziona tutto perfettamente fino a quando deve essere eseguito questo nella seconda funzione imgy_1() per aumentare l'opacity:


    codice:
    document.getElementById("img_1").style.opacity = opa_1;
    Qual'è il problema? Perchè il codice si interrompe li e non esegue l'istruzione?
    Ultima modifica di BlackFenix06; 23-12-2014 a 22:07

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Soluzioni fade opacity:
    css3 http://jsfiddle.net/7uR8z/6/ (compatibilità piena solo con i nuovi browser)
    jquery http://api.jquery.com/fadeTo/ (compatibilità completa con tutti i browser e versioni)
    sistemare il tuo codice richiede tempo e voglia
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Allora, per la prima soluzione potrei farlo, però come faccio a dire a Javascript che l'effetto è finito, in modo che faccia comparire la scritta?
    La seconda soluzione non posso usarla, perchè su webnode (dove ho il mio sito) usando jquery ho notato che incasina il css del sito

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Quote Originariamente inviata da BlackFenix06 Visualizza il messaggio
    Allora, per la prima soluzione potrei farlo, però come faccio a dire a Javascript che l'effetto è finito, in modo che faccia comparire la scritta?
    non puoi
    La seconda soluzione non posso usarla, perchè su webnode (dove ho il mio sito) usando jquery ho notato che incasina il css del sito
    molto strano, in tal caso devi insistere con js, prova a mettere la pagina demo online forse qualcuno trova una soluzione.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Fatto, si trova al link: http://poliglot.altervista.org/BlackFenix06/prova4.html
    Spero che qualcuno mi possa aiutare

  8. #8
    Finalmente dopo tanta fatica sono riuscito a trovare una soluzione XD
    Posto il codice con la soluzione per chi fosse interessato e spiego cosa ho cambiato:

    codice:
    <style type="text/css">
    <!-- 
    #img_1 {width: 120px; border: none; opacity: 1.0; display: block;}
    #td_img_1 {color: #FF0000; font-weight:bold; text-align: center; height: 87px;}
    #tex_1 {display: none;}
    -->
    </style>
    <script language="JavaScript" type="text/javascript">
    <!--
    txe = 0;
    repx_1 = 0;
    timo_1 = 0;
    timo_2 = 0;
    timo_3 = 0;
    opa_1 = 0;
    opak_1 = 10;
    function parten() {
    if (repx_1==0) {
    repx_1=repx_1+1;
    imgx_1();
    }
    }
    function imgx_1() {
    if (opak_1==0) {
    clearTimeout(timo_1);
    document.getElementById("img_1").style.display="none";
    document.getElementById("tex_1").style.display="block";
    setTimeout(imgy_1, 1000);
    }
    else {
    clearTimeout(timo_1);
    opak_1=opak_1-1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    timo_1 = setTimeout(imgx_1, 100);
    }
    }
    function imgy_1() {
    if (opak_1==10) {
    clearTimeout(timo_3);
    txe=txe-1;
    repx_1=repx_1-1;
    }
    else {
    if (txe==0) {
    txe=txe+1;
    document.getElementById("tex_1").style.display="none";
    document.getElementById("img_1").style.display="block";
    timo_2 = setTimeout(imgy_1, 100);
    }
    else {
    clearTimeout(timo_2);
    clearTimeout(timo_3);
    opak_1=opak_1+1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    timo_3 = setTimeout(imgy_1, 100);
    }
    }
    }
    //-->
    </script>
    <table class="tab_menu">
    <tr>
    <td id="td_img_1"><img src="http://files.blackfenix06.webnode.it/200000006-29e992ae2a/giphy.gif" id="img_1" onmouseover="parten()"><span id="tex_1">Homepage</span></td>
    </tr>
    </table>



    Allora, la prima parte da analizzare è questa:

    codice:
    repx_1 = 0;
    function parten() {
    if (repx_1==0) {
    repx_1=repx_1+1;
    imgx_1();
    }
    }
    Nella tabella, l'immagine ha l'evento onmouseover:

    codice:
    <img src="http://files.blackfenix06.webnode.it/200000006-29e992ae2a/giphy.gif" id="img_1" onmouseover="parten()">
    Quando il mouse si muove all'interno dell'immagine, fa partire la funzione parten(). Essa controlla se la variabile repx_1 vale 0. Se essa vale 0, richiama la funzione imgx_1() e la variabile passa al valore 1, se non vale 0 (quindi 1) termina l'esecuzione dello script. Questa funzione serve a non far ripetere lo script nel caso venga mosso il mouse nell'esecuzione creando un loop.




    La seconda parte da analizzare è questa:

    codice:
    timo_1 = 0;
    opa_1 = 0;
    opak_1 = 10;
    function imgx_1() {
    if (opak_1==0) {
    clearTimeout(timo_1);
    document.getElementById("img_1").style.display="none";
    document.getElementById("tex_1").style.display="block";
    setTimeout(imgy_1, 1000);
    }
    else {
    clearTimeout(timo_1);
    opak_1=opak_1-1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    timo_1 = setTimeout(imgx_1, 100);
    }
    }
    La funzione imgx_1(), richiamata in precedenza, controlla se la variabile opak_1 è uguale a 0.
    Nel caso non valga 0 verrà eseguito questo passaggio:

    codice:
    else {
    clearTimeout(timo_1);
    opak_1=opak_1-1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    timo_1 = setTimeout(imgx_1, 100);
    }
    Prima cosa viene disattivato qualsiasi timer con variabile timo_1, anche se non è attivo un timer con quella variabile non crea problemi. Dopo ridurrà la variabile opak_1 di uno, per poi dare il valore di quest'ultima alla variabile opa_1 diviso 10. Questo perchè l'attributo CSS3 opacity funziona con numeri decimali (da 0.0 a 1.0). A questo punto modifica l'attributo opacity dell'immagine con id img_1 del valore di opa_1. Fatto questo un setTimeout con variabile timo_1 fa ripartire immediatamente la funzione imgx_1() da capo, in modo da creare un ciclo che si ripeta fino a quando la variabile opak_1 varrà 0. Il clearTimeout detto in precedenza serve appunto per disattivare il setTimeout in modo che ripetendo la funzione essi non si accavallino.

    Una volta che nel ciclo opak_1 vale 0, non verrà più fatto il ciclo, ma verrà eseguita questa istruzione:

    codice:
    if (opak_1==0) {
    clearTimeout(timo_1);
    document.getElementById("img_1").style.display="none";
    document.getElementById("tex_1").style.display="block";
    setTimeout(imgy_1, 1000);
    }
    Come prima viene innanzitutto disattivato il setTimeout (timo_1). Poi verrà modificato l'attributo display dell'immagine a none, in questo modo essa scomparerà del tutto. Infine verrà modificato l'attributo display del testo nascosto, con id tex_1, a block, in modo che sia visibile. Il testo di partenza era nascosto.

    codice:
    <style type="text/css">
    <!-- 
    #tex_1 {display: none;}
    -->
    </style>
    <span id="tex_1">Homepage</span>
    Infine un'ultimo setTimeout dopo un secondo richiamerà la funzione imgy_1(). Essa farà il lavoro contrario di quanto spiegato fin'ora.




    La terza parte, ovvero il ripristino, da analizzare è questa:

    codice:
    function imgy_1() {
    if (opak_1==10) {
    clearTimeout(timo_3);
    txe=txe-1;
    repx_1=repx_1-1;
    }
    else {
    if (txe==0) {
    txe=txe+1;
    document.getElementById("tex_1").style.display="none";
    document.getElementById("img_1").style.display="block";
    timo_2 = setTimeout(imgy_1, 100);
    }
    else {
    clearTimeout(timo_2);
    clearTimeout(timo_3);
    opak_1=opak_1+1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    timo_3 = setTimeout(imgy_1, 100);
    }
    }
    }
    La funzione imgy_1(), richiamata in precedenza, controlla se la variabile opak_1 è uguale a 10.
    Nel caso non valga 10 verrà eseguito questo passaggio:

    codice:
    else {
    if (txe==0) {
    txe=txe+1;
    document.getElementById("tex_1").style.display="none";
    document.getElementById("img_1").style.display="block";
    timo_2 = setTimeout(imgy_1, 100);
    }
    else {
    clearTimeout(timo_2);
    clearTimeout(timo_3);
    opak_1=opak_1+1;
    opa_1=opak_1/10;
    document.getElementById("img_1").style.opacity = opa_1;
    timo_3 = setTimeout(imgy_1, 100);
    }
    }
    Un'ultimo controllo per verificare se la variabile txe è 0.
    Nel caso sia 0, il testo con id tex_1 scompare modificando di nuovo l'attributo display per far ricompaire l'immagine con id img_1. Viene aggiunto 1 alla variabile txe. Un setTimeout con variabile timo_2 fa ripartire la funzione da capo.
    Nel caso sia 1, le prime due istruzione sono due clearTimeout, che servono allo stesso modo del primo che abbiato usato la prima volta (timo_1). Alla variabile opak_1 viene aggiunto 1. Dopo alla variabile opa_1 viene di nuovo assegnato il valore di opak_1 diviso dieci. A questo punto viene modificata l'attributo opacity come prima, solo che in questo caso al posto di scomparire, riapparirà. Un setTimeout con variabile timo_3 fa richiama la funzione imgy_1() per creare un ciclo fino a quando opak_1 non varrà 10.
    A cosa serve la variabile txe? Serve a fare in modo che l'istruzione:

    codice:
    document.getElementById("tex_1").style.display="none";
    document.getElementById("img_1").style.display="block";
    Venga solo eseguita una volta.

    Una volta che nel ciclo opak_1 vale 10, non verrà più fatto il ciclo, ma verrà eseguita questa istruzione:

    codice:
    if (opak_1==10) {
    clearTimeout(timo_3);
    txe=txe-1;
    repx_1=repx_1-1;
    }
    Come sempre un clearTimeout con variabile timo_3 disattiva il setTimeout. A questo punto sia alla variabile txe, sia alla variabile repx_1, viene tolto 1, in modo da riportarle al valore iniziale.

    Dopo questo il codice è pronto per essere eseguito di nuovo da capo appena si muove il mouse all'interno dell'immagine. L'effetto potete vederlo al link postato nella mia precedente risposta

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.