2011-10-08 13 views
5

Mam następujący kod JavaScript, aby łącze tekstowe świeciło się/pulsowało w sposób ciągły. Ten link pokazuje kolejną sekcję tej samej strony, więc chciałbym, aby zatrzymało się po kliknięciu przez użytkownika.JavaScript efekt blasku/pulsacji, aby zatrzymać się po kliknięciu

<script type="text/javascript"> 
    $(document).ready(function() { 
     function pulsate() { 
      $(".pulsate").animate({opacity: 0.2}, 1200, 'linear') 
         .animate({opacity: 1}, 1200, 'linear', pulsate); 
     } 

     pulsate(); 
    }); 
    </script> 

Po prostu muszę wiedzieć, co muszę dodać, aby efekt został zatrzymany po kliknięciu.

Jeśli to samo łącze zostanie kliknięte ponownie, odsłonięty fragment strony zostanie ukryty - czy zbyt dużym kłopotem jest ponowne uruchomienie efektu po drugim kliknięciu?

Czekam na odpowiedź od was, dobrzy ludzie.

Scott.

+0

To wydaje się niebezpiecznie blisko do odtworzenia tag . Jeśli akcja jest tak ważna, prawdopodobnie powinieneś po prostu zrobić to łatwo, wyciąć inne, mniej ważne wybory lub po prostu zrobić to z wyprzedzeniem ... – Kzqai

+0

coś w rodzaju tak, ale z zanikaniem - don ' Nie martw się, nie wygląda tak tandetnie na stronie w subtelnym kolorze czcionki. Po prostu potrzebuję go zatrzymać po kliknięciu. – scottk

+0

Heh, o ile używasz tego z celem i umiarem, wtedy. : D – Kzqai

Odpowiedz

7

Wystarczy połączyć się z wydarzeniem kliknięcia i zadzwonić pod numer stop(). Należy również upewnić się, że zmętnienie został przywrócony do :

$(document).ready(function() { 
    function pulsate() { 
     $(".pulsate").animate({ opacity: 0.2 }, 1200, 'linear') 
        .animate({ opacity: 1 }, 1200, 'linear', pulsate) 
        .click(function() { 
         //Restore opacity to 1 
         $(this).animate({ opacity: 1 }, 1200, 'linear'); 
         //Stop all animations 
         $(this).stop(); 
        }); 
     } 

    pulsate(); 
}); 

Oto a working jsFiddle.

+2

Nie czuję się dobrze z tym podejściem. Dla każdej pętli elementy DOM '$ ('. Pulsuj') rejestrują funkcję kliknięcia. A jeśli powiedzmy 5 elementów i będą pętle przez około jedną minutę, to będzie około mniej niż (5 * 60), aby to zatrzymać. –

+0

@TalhaAhmedKhan Gdy animacja wywołuje funkcję pulsowania, możesz ją wywołać z parametrem, który mówi, żeby nie rejestrowała obsługi kliknięcia. –

+0

@TalhaAhmedKhan, jeśli masz lepszą odpowiedź, opublikuj ją. Nie zmieniaj całkowicie mojej odpowiedzi (ani nikogo innego) i dodaj linię "edytuj według". –

3

Rozwiązanie jest dość proste. Niech funkcja pulsate() upewni się, że .pulsate nie ma klasy stop przed wykonaniem tej czynności. Jeśli ma tę klasę, funkcja pulsate() po prostu ożywi połączenie z powrotem do pełnego krycia, ale nie będzie kontynuować pulsowania.

Przykład Jamesa działa również, ale ja wolę moje podejście, ponieważ jego sposób wiąże się z wydarzeniem click z .pulsate w kółko. Tego rodzaju rzeczy mogą powodować problemy w zależności od reszty strony.

żywo przykład: http://jsfiddle.net/2f9ZU/

function pulsate() { 
    var pulser = $(".pulsate"); 
    if(!pulser.hasClass('stop')){ 
     pulser.animate({opacity: 0.2}, 1200, 'linear') 
     .animate({opacity: 1}, 1200, 'linear', pulsate); 
    }else{ 
     pulser.animate({opacity:1},1200) 
      .removeClass('stop'); 
    } 
} 

$(document).ready(function() { 
    pulsate(); 
    $('a').click(function(){ 
     $('.pulsate').addClass('stop'); 
    }); 
}); 
Powiązane problemy