jQuery избледняващ блясък специален текстов ефект

Бих искал да накарам черния текст на съобщението за грешка да "свети" с червен контур, който избледнява след секунда, но ако се актуализира, да се върне към "пълен блясък" и да започне да избледнява отново, дори и да не е изчезнал напълно на първо място. Има ли сравнително лесен jQuery/CSS начин да направите това? Мисля, че две едновременни техники за избледняване ще се конкурират една с друга, тъй като са асинхронни и всичко останало, и не знам как да генерирам светещия ефект или дали изобщо е възможно да използвам стандартен стил.


person Jeremy Holovacs    schedule 29.08.2012    source източник
comment
Търсенето в гугъл за 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 animate със свойства на 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 animate със свойства на 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

Ето версия на отговора на barlasapaydin, който работи с отрицателни анимации:

$.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/

Някаква полезна документация на трети страни за обекта "step":

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