2013-02-11 22 views
5

Próbuję uzyskać efekt, w którym kolor tła jest pulsowany, gdy stan jest mną. Tak mam:Efekt pulsacji z przejściami jQuery i CSS

<div class="box">...</div> 

.box { 
    background-color: #fff; 
    transition: background-color 0.5s ease-out; 
} 
.box.active { 
    background-color: #ccc; 
} 

więc teraz chcę użyć jQuery do dodawania i usuwania tej klasy kilka razy, aby stworzyć efekt background-color pulsujące. Coś takiego:

$('.box').addClass('active').delay(1000).removeClass('active').delay(1000).addClass('active'); 

To, teoretycznie, powinno stworzyć efekt pulsowania, ale tak nie jest. Co się dzieje, jest to, że klasa "aktywna" jest dodawana i nigdy nie jest usuwana ani dodawana ponownie. To prawie tak, jakby pierwszy "removeClass" nigdy nie został uruchomiony.

Brakuje mi czegoś, ale nie wiem co. Może ma to coś wspólnego z czasem przejścia CSS, ale powinny one być od siebie niezależne, prawda?

Dzięki za wszelkie pomysły.

+0

Widziałeś to [http://docs.jquery.com/UI/Effects/Pulsate](http://docs.jquery.com/UI/Effects/ Pulsować)? – Morpheus

+0

Tak, ale z tego, co wiem, to tylko nieprzezroczystość. Chciałbym również osiągnąć to bez korzystania z jQueryUI. – dmathisen

Odpowiedz

16

Opóźnienie działa tylko z animacjami, nie dodając ani nie usuwając klas. Ponadto możesz pulsować przy użyciu klatek kluczowych w CSS:

+0

> Opóźnienie działa tylko z animacjami Nie wiedziałem tego - dzięki! – dmathisen

+0

Uzgodnione, użycie własności 'animation-iteration-count' jest zdecydowanie najłatwiejszym rozwiązaniem w tym przypadku; nawiasem mówiąc [tutaj jest demo, które składałem razem] (http://jsfiddle.net/davidThomas/NZdVK/2/) dla mojej własnej (teraz niepotrzebnej) odpowiedzi. –

+0

Zobacz też http://docs.jquery.com/Release:jQuery_1.2/Effects#Color_Animations, aby uzyskać więcej przykładowego kodu. – RandomUs1r

0

Myślę, że to jest to, czego potrzebujesz, funkcja, która wywołuje się co x sekund i zmienia właściwość css, see live demo.

var state = true; 
function changeColor() { 
    state = !state; 
    if(state){ 
     $("div").css("background","red"); 
    }else{ 
     $("div").css("background","blue"); 
    } 
    setTimeout(function() { 
     changeColor(); 
    }, 1000); 
} 

changeColor(); 
+0

Zły pomysł, w dzisiejszych czasach pozwolimy CSS wykonać całą ciężką pracę –

4

Spróbuj uzyskać ten efekt za pomocą animacji CSS3.

@-webkit-keyframes pulsate 
{ 
     0% {background-color: #fff;} 
     50% {background: #ccc;} 
     100% {background: #fff;} 
} 

następnie zastosować klatek kluczowych do elementu

.box{ 
    animation: pulsate 2s infinite; 
} 

http://jsfiddle.net/taltmann/jaQmz/

+2

Technicznie można przejść bez stanów 0% i 100%, ponieważ domyślnie są one ustawione na pierwotny stan elementu. – moettinger

+0

Również, @dmathison, podałeś (parafrazujesz) "puls kilka razy" ta odpowiedź pulsuje * nieskończenie *. –

+0

@DavidThomas, racja. Wygląda na to, że mogę modyfikować _animation: pulsujące 2s 2; _ – dmathisen

1

Funkcja delay jest rzeczywiście używany tylko do animacji box. Dodawanie i usuwanie klasy nie jest animacją, ale możesz użyć metody queue lub funkcji setTimeout, aby osiągnąć to, co chcesz.

To pytanie ma wiele dobrych odpowiedzi na inne thread, które mogą być interesujące dla Ciebie.

2

zasadzie jeśli chcesz pulsować zawsze należy użyć setInterval() i skonfigurować dla was przykładem tutaj http://jsfiddle.net/UftRT/

function pulssate() { 
if ($('.box').hasClass('active')) { 
    $('.box').removeClass('active') 
} else { 
    $('.box').addClass('active') 
} 
} 
window.setInterval(function() { pulssate(); },1000); 

jeśli chcesz go zatrzymać tylko ustawić interwał w zmiennej następnie zadzwonić window.clearInterval (int), podobny do tego int = window.setInterval(function() { pulssate(); },1000);