Специальный текстовый эффект затухания свечения jQuery

Я хотел бы, чтобы черный текст сообщения об ошибке «светился» с красным контуром, который исчезал через секунду, но при обновлении возвращался к «полному свечению» и снова начинал исчезать, даже если он не исчез полностью в первую очередь. Есть ли довольно простой способ jQuery/CSS сделать это? Я думаю, что два одновременных метода затухания будут конкурировать друг с другом, будучи асинхронными и все такое, и я не совсем понимаю, как создать эффект свечения и возможно ли это вообще, используя стандартные стили.


person Jeremy Holovacs    schedule 29.08.2012    source источник
comment
Поиск в Google анимированного свечения css привел меня здесь.   -  person Blazemonger    schedule 30.08.2012


Ответы (6)


Вам не нужно использовать какие-либо внешние плагины, вы можете сделать это с помощью всего лишь jQuery 1.8 и css3, но это непросто. Вам нужно объединить свойство css3 text-shadow с animate()

ОБНОВЛЕНИЕ: исправлены ошибки.

Вот работает эффект свечения текста jsFiddle.

jQuery:

var red = $(".red");
red.click(function() {
   if ( !$(this).is(':animated') )

    //you just adjust here
    red.glowEffect(0,40,500);
    //which is:
    //red.glowEffect( start value , destination value , duration );
});

$.fn.glowEffect = function(start, end, duration) {
    var $this = this;
    return this.css("a", start).animate({
        a: end
    }, {
        duration: duration,
        step: function(now) {
            $this.css("text-shadow","0px 0px "+now+"px #c61a1a");
        }
    });
};​

CSS:

.red { text-shadow: 0px 0px 0px #c61a1a; }

Примечание. Нет необходимости определять префиксы поставщиков, такие как -webkit- -ms- -moz- -o-. jQuery 1.8 исправляет это автоматически.

Источник: я задавал аналогичный вопрос на прошлой неделе, и получил отличные ответы:

Как объединить анимацию jQuery со свойствами css3 без использования CSS-переходов?

person Barlas Apaydin    schedule 29.08.2012
comment
Можно ли это прервать и сбросить само по себе? - person Jeremy Holovacs; 30.08.2012
comment
@JeremyHolovacs Да. Вы можете делать любую анимацию, которая вам нужна, просто настройте функцию red.glowEffect внутри клика. Я объяснил и указал на это в своем обновлении. - person Barlas Apaydin; 30.08.2012
comment
Хм... это не совсем то, что я искал. Похоже, что это будет игнорировать последующую анимацию, если она затухает... Я хочу, чтобы она сбрасывалась в свое свежее, ярко светящееся состояние, если событие происходит до завершения последней анимации. - person Jeremy Holovacs; 30.08.2012
comment
в вашем вопросе нет примера, поэтому я сделал это так, если вы действительно понимаете это, вы понимаете, что можете сделать с этим все что угодно - person Barlas Apaydin; 30.08.2012
comment
Я заметил, что эта функция не работает с негативной анимацией, например red.glowEffect(100,0,500); Что является частью того, чего хочет оператор. - person Jan; 30.08.2012
comment
@Jan Ян, да, что я пытаюсь подчеркнуть в своем обновлении. Я снова обновлю свой ответ. - person Barlas Apaydin; 30.08.2012
comment
Провел некоторое тестирование, и это потому, что свойство css a не существует, поэтому оно всегда начинается с 0. - person Jan; 30.08.2012
comment
@Jan Большое спасибо, вы обнаружили ошибку (: я поработаю над этим. Но проблем не будет, если анимация начнется со значения 0. - person Barlas Apaydin; 30.08.2012
comment
@JeremyHolovacs я обновил свой ответ и устранил ошибки, надеюсь, это поможет. - person Barlas Apaydin; 30.08.2012
comment
Просто для ясности: это решение всегда запускает анимацию с 0, поэтому с ним невозможно создать эффект затухания, только постепенное появление. Если с опером все в порядке, стреляйте! :) - person Jan; 01.09.2012
comment
@Jan Мы исправили эту проблему, приятель: jsfiddle.net/qZRdZ/112, и вот вопрос: Как объединить анимацию jQuery со свойствами css3 без использования CSS-переходов? Если у вас есть лучшее решение, напишите здесь. - person Barlas Apaydin; 01.09.2012

Решение на чистом CSS3, бесстыдно украденное из здесь:

a.glow, a.glow:hover, a.glow:focus {  
    text-decoration: none;  
    color: #aaf;  
    text-shadow: none;  
    -webkit-transition: 500ms linear 0s;  
    -moz-transition: 500ms linear 0s;  
    -o-transition: 500ms linear 0s;  
    transition: 500ms linear 0s;  
    outline: 0 none;  
} 
a.glow:hover, a.glow:focus  {  
    color: #fff;  
    text-shadow: -1px 1px 8px #ffc, 1px -1px 8px #fff;  
}  
person Blazemonger    schedule 29.08.2012
comment
интересно... попробую. - person Jeremy Holovacs; 30.08.2012
comment
Это имеет очень хороший эффект, но отвечает только на первую часть вопроса; как бы я реализовал это свечение и заставил его медленно исчезать, если только событие, которое заставило его светиться и начало его затухание, не было запущено снова, после чего оно сбрасывается до полного свечения? - person Jeremy Holovacs; 30.08.2012
comment
Вы пробовали с ним возиться? Если вы разделите стили для a.glow и a.glow:hover, a.glow:focus, то вы сможете настроить синхронизацию для включения и выключения переходов отдельно. jsfiddle.net/mblase75/GzTC7 - person Blazemonger; 30.08.2012

Вот версия ответа барласапайдина, которая работает с отрицательной анимацией:

$.fn.glowEffect = function(start, end, duration, callback) {
    // Fetch last animation position
    if (this.data("last-glow")) 
        start = this.data("last-glow");

    return this.animate({
        'placeholder': end // This can be anything, it's just a placeholder to allow the animation to run
    }, {
        duration:duration,
        step: function(now, fx) {
            // Calculate current position
            now = parseInt(start + (end - start)*(fx.pos));
            // Set current animation position
            $(fx.elem).css("text-shadow","0px 0px "+now+"px #c61a1a")
                // Save position (if animation is interrupted)
                .data("last-glow", now);
        },
        complete:callback
    });
};

$(".red").click(function() {
    $(this)
        .stop()
        .glowEffect(0,50,1000, // Fade in
                    function() 
                    { 
                        $(this).glowEffect(50,0,1000);  // Fade out
                    });
});

Код немного запутанный, но работает отлично.

http://jsfiddle.net/Jf4vB/38/

Некоторая полезная сторонняя документация по объекту «шаг»:

http://cdmckay.org/blog/2010/03/01/the-jquery-animate-step-callback-function/

person Jan    schedule 30.08.2012
comment
лол, хорошая попытка, приятель, мы решаем проблему с моим ответом, который вы нашли (: это работает отлично: jsfiddle.net /qZRdZ/112 - person Barlas Apaydin; 30.08.2012
comment
вы можете проверить шаги этого плагина из этого вопроса: stackoverflow.com/questions/12062818/ - person Barlas Apaydin; 30.08.2012

С помощью плагина анимации jQuery UI вы можете создать нечеткую красную тень позади вашего текста (используя свойства CSS3), а затем анимировать ее непрозрачность, размер и т. д.

person Alnitak    schedule 29.08.2012
comment
Чтобы быть уверенным, если вы собираетесь использовать свойства CSS3, вы также можете пройти весь путь и анимировать его с помощью переходов CSS. - person Blazemonger; 30.08.2012

Чтобы сделать циклическую анимацию в JQuery, вы можете сделать что-то вроде этого:

Затухание JQuery с циклом и задержкой

Затем вы можете использовать CSS3 для добавления свечения текста (или тени), но обратите внимание, что это не поддерживается в некоторых браузерах.

person SaphuA    schedule 29.08.2012

Я бы использовал свойство CSS3 text-shadow для эффекта свечения и $(".textid").stop().addClass("glow", 1000); для анимации.

РЕДАКТИРОВАТЬ: Хорошо, это не сработало: http://jsfiddle.net/2pBxP/ :)

person Jan    schedule 29.08.2012