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

    Animazioni ed effetti onclick [jQuery]

    Salve,

    Ho questo semplice codice jQuery
    codice:
    function news_popup()
    	{
    		$('#alertnews').hover(
    			
    			function() { $('#news_list').stop().animate({"opacity": 1});},
    			function() {$('#news_list').stop().animate({"opacity": 0});}
     	);
     }
    Che ovviamente applica un effetto di fade in/out sull'elemento "#alertnews"

    Se adesso volessi mantenere quell'effetto, ma abilitare anche un effetto on click su quell'elemento?

    L'effetto on click deve semplicemente mostrare "#news_list" senza più eseguire il fadeout se sposto il mouse da "#alertnews"

    In poche parole voglio che funzioni l'effetto di fade in/out al passaggio del mouse, ma anche che l'utente abbia la possibilità di cliccare "#alertnews" per far vedere senza far più scomparire la lista di news.

    Grazie in anticipo

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao,
    prova così, per eliminare tutti gli eventi:
    codice:
    $('#alertnews').hover(
      function() {$('#news_list').stop().animate({"opacity": 1});},
      function() {$('#news_list').stop().animate({"opacity": 0});}
    ).click(function(){$(this).unbind()});
    oppure cosi, per eliminare solo l'evento hover:
    codice:
    $('#alertnews').hover(
      function() {$('#news_list').stop().animate({"opacity": 1});},
      function() {$('#news_list').stop().animate({"opacity": 0});}
    ).click(function(){$(this).unbind('mouseenter mouseleave')});
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Ti rompo ancora un attimo le scatole, così funziona alla perfezione, ma se dovessi poi abilitare nuovamente l'evento hover quando riclicco sull'oggetto, oppure quando clicco a vuoto nel body?

    Grazie

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    La cosa si complica un po'. Per il click a vuoto nel body bisogna catturare l'evento sul body (o sul tag html), a quel punto si deve verificare se si sta cliccando su quell'elemento o su qualsiasi altra cosa, quindi andare ad attivare/disattivare l'effetto over.

    Ho provato a mettere giù qualcosa. Ti posto un esempio funzionante da cui puoi prendere spunto.
    Tieni conto che l'ho elaborato secondo una mia logica. Chiaramente ci possono essere tanti altri modi per risolvere (più o meno validi anche in base al tuo scenario e a quanto realmente ti serve ottenere):
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script type="text/javascript">
          $(function(){
            // catturo l'evento click eseguito su un qualsiasi punto del documento
            $('html').click(function(e) {
              var o = $(e.target).closest('#alertnews').length; // restituisce 1 se sto cliccando su alertnews, altrimenti 0
              $('#news_list').toggleClass('aperto',o==1); // applico una classe (se ho cliccato sull'elemento) per definire se news_list deve restare aperto
              o==0 && fadeNewsList(0); // se ho cliccato fuori da alertnews, eseguo la chiusura 
            });
            // effetto di apertura/chiusura di news_list
            function fadeNewsList(o){ // passare 1 per aprire, 0 per chiudere
              $('#news_list:not(.aperto)').stop().animate({"opacity": o}); // se news_list non ha la classe "aperto", allora eseguo l'animazione
            }
            // evento hover su alertnews
            $('#alertnews').hover(
                function(){fadeNewsList(1)} // se sono sopra, effettuo l'apertura di news_list
              , function(){fadeNewsList(0)} // altrimenti, effettuo la chiusura
            );
          });
        </script>
      </head>
      <body>
        <div id="alertnews">
          <span style="color:blue">Lorem</span>
          <div id="news_list" style="background:beige;opacity:0">
            ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
          </div>
        </div>
        <hr>
      </body>
    </html>
    In tal caso ho lasciato attivo l'hover per questioni di praticità. L'effetto di apertura/chiusura viene poi gestito nella funzione fadeNewsList.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Grazie mille!!!

    Ultima cosa velocissima: se volessi si chiudesse anche quando riclicco su #alertnews ed è già aperto? ^^

    Ho provato ad aggiungere un 0==1 ma ovviamente non funge .-.

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ultima cosa velocissima: se volessi si chiudesse anche quando riclicco su #alertnews ed è già aperto?
    La cosa non è velocissima. Ci sono diversi eventi/variabili in gioco, bisogna fare quindi dei controlli incrociati.

    Ho provato ad aggiungere un 0==1 ma ovviamente non funge .-.
    Beh, vien da sè che "zero" non sarà mai uguale ad "uno", non pensi? Questa condizione darà sempre falso, quindi non capisco in base a quale principio hai cercato di applicarla.

    Vedi un po' così:
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script type="text/javascript">
          $(function(){
            // catturo l'evento click eseguito su un qualsiasi punto del documento
            $('html').click(function(e) {
              $(e.target).closest('#alertnews').length // controllo se sto cliccando su alertnews
              ? $('#news_list').toggleClass('aperto') // se ho cliccato su alertnews, allora inverto l'applicazione della classe 'aperto' su news_list
              : $('#news_list').removeClass('aperto'); // altrimenti (se ho cliccato in qualsiasi altro punto) la rimuovo
              fadeNewsList(+$('#news_list').hasClass('aperto')); // effettuo l'apertura/chiusura di news_list in base alla presenza, o no, della classe 'aperto'
            });
            // effetto di apertura/chiusura di news_list
            function fadeNewsList(o){ // passare 1 per aprire, 0 per chiudere
              $('#news_list'+(o?'':':not(.aperto)')).stop().animate({"opacity": o}); // apro/chiudo news_list. Viene ignorata la chiusura se ha la classe 'aperto' (news_list resta aperto)
            }
            // evento hover su alertnews
            $('#alertnews').hover(
                function(){fadeNewsList(1)} // se sono sopra, effettuo l'apertura di news_list
              , function(){fadeNewsList(0)} // altrimenti, effettuo la chiusura
            );
          });
        </script>
      </head>
      <body>
        <div id="alertnews">
          <span style="color:blue">Lorem ipsum</span>
          <div id="news_list" style="background:beige;opacity:0">
            dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
          </div>
        </div>
        <hr>
      </body>
    </html>
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.