2013-02-11 3 views
5

Я пытаюсь добиться эффекта, при котором цвет фона пульсирует, когда меня это условие. Поэтому у меня есть:Пульсационный эффект с переходами jQuery и CSS

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

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

Так что теперь я хочу использовать JQuery для добавления и удаления, что класс пару раз, чтобы создать цвет фона пульсирующий эффект. Что-то вроде:

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

Это теоретически должно создавать пульсирующий эффект, но это не так. Случается, что «активный» класс добавляется и никогда не удаляется или не добавляется снова. Это похоже на то, что первый «removeClass» никогда не запускается.

Мне что-то не хватает, но не знаю, что. Может быть, это имеет какое-то отношение к времени перехода CSS, но они должны быть независимы друг от друга, не так ли?

Спасибо за любые идеи.

+0

Вы видели это [http://docs.jquery.com/UI/Effects/Pulsate](http://docs.jquery.com/UI/Effects/ Пульсировать)? – Morpheus

+0

Да, но насколько я знаю, это только для непрозрачности. Я также хотел бы выполнить это без использования jQueryUI. – dmathisen

ответ

16

Задержка работает только с анимацией, а не с добавлением и удалением классов. Кроме того, вы можете пульсировать с использованием ключевых кадров в CSS:

@keyframes pulse { 
    50% { background-color: #ccc } 
} 

.box { 
    animation: pulse .5s ease-out 2; 
} 
+0

> Задержка работает только с анимацией Я этого не знал - спасибо! – dmathisen

+0

Согласовано, использование свойства «анимация-итерация-счет» является самым простым решением в этом случае; кстати, [вот демонстрация, которую я собирал] (http://jsfiddle.net/davidThomas/NZdVK/2/) для моего собственного (теперь ненужного) ответа. –

+0

Также посмотрите http://docs.jquery.com/Release:jQuery_1.2/Effects#Color_Animations для большего количества примеров кода. – RandomUs1r

0

Я думаю, что это то, что вам нужно, функция, которая называет себя каждые x секунд и изменяет свойство 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

Плохая идея, в настоящее время мы позволяем CSS делать всю тяжелую работу –

4

Попробуйте добиться этого эффекта с помощью анимации CSS3.

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

Затем примените ключевые кадры к box элементу

.box{ 
    animation: pulsate 2s infinite; 
} 

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

+2

Технически вы могли бы пойти без 0% и 100% состояний, поскольку они по умолчанию соответствуют исходному состоянию элемента. – moettinger

+0

Кроме того, @dmathison, вы указали (перефразировать) «импульс пару раз», этот ответ пульсирует * бесконечно *. –

+0

@DavidThomas, справа. Похоже, я могу изменить на _animation: pulsate 2s 2; _ – dmathisen

1

delay функция фактически используется только для анимации. Добавление и удаление класса не является анимацией, но вы можете использовать метод queue или setTimeout для достижения того, что вы хотите.

Этот вопрос имеет много хороших ответов на другой thread, который может сделать интересным для вас чтение.

2

в основном, если вы хотите, чтобы пульсировать навсегда, вы должны использовать setInterval() Я создал пример для вас здесь http://jsfiddle.net/UftRT/

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

, если вы хотите, чтобы остановить только установить интервал в переменной затем вызвать window.clearInterval (int), например int = window.setInterval(function() { pulssate(); },1000);

Смежные вопросы