Как я могу мигать с помощью jQuery?

Я хотел бы мигать своим текстом меню. У меня есть этот код, но он не работает с IE.

(function($)
{
    $.fn.blink = function(options) {
        var defaults = { delay:500 };
        var options = $.extend(defaults, options);

        return this.each(function() {
            var obj = $(this);
            setInterval(function() {
                if($(obj).css("color") == "rgb(255, 0, 0)")
                {
                    $(obj).css('color','#000000');
                }
                else
                {
                    $(obj).css('color','rgb(255, 0, 0)');
                }
            }, options.delay);
        });
    }
}(jQuery))

$(document).ready(function(){$('.blink').blink()})

Кто-нибудь может мне помочь? Спасибо!


person Nathaniel    schedule 29.07.2010    source источник
comment
вы должны быть в состоянии сделать это инстинктивно, когда ваши глаза высохнут..   -  person Gabriele Petrioli    schedule 29.07.2010
comment
Единственный способ моргнуть — не использовать моргание. Читайте: У МЕНЯ ГЛАЗА ГОРЯТ!   -  person    schedule 29.07.2010
comment
Знает ли IE rgb(,,)? Поскольку IE тупее камня, я бы сказал да. В этом случае я был бы счастлив при использовании IE :)   -  person    schedule 29.07.2010
comment
IE пытается помочь вам, не заставляя его работать. Как ни странно.   -  person BoltClock    schedule 29.07.2010
comment
Вы можете легко изменить вызовы rgb(...) на #f00, чтобы получить то, что, как вы знаете, соответствует стандартам.   -  person Tomas Aschan    schedule 29.07.2010
comment
@Thomas: ты знаешь, что Gecko меняет все на rgb (,,), верно?   -  person    schedule 29.07.2010
comment
пожалуйста, будьте осторожны с использованием блинка в Интернете, так как он очень легко отвлекает.   -  person second    schedule 29.07.2010


Ответы (4)


Подключаемые модули Mini-Effects должны быть здесь проще — очень маленькие и понятные. эффективен, если это все, что вам нужно от библиотеки эффектов пользовательского интерфейса (помимо этих других предметов первой необходимости, «пульсация», «встряхивание» и «боб»).

Простота в использовании — просто загрузите нужный вам плагин мини-эффектов, а затем просто вызовите blink() для элемента, который вы хотите мигать.

<script type="text/javascript" charset="utf-8" src="javascripts/jquery.blink.min.js"></script>

Затем просто вызовите blink() для какого-нибудь большого ярко окрашенного ресурса:

$(".selector").blink();
person doug    schedule 29.07.2010
comment
вы имеете в виду скорость мигания (почти уверен, что это то же самое, что и метод мигания в основной библиотеке эффектов пользовательского интерфейса) или кросс-браузерную точность или ни то, ни другое? - person doug; 29.07.2010

Вы устанавливаете obj как $(this), поэтому вы должны каждый раз вызывать obj вместо $(obj).

Просто замените

obj = $(this);

Только с

obj = this;

Но все же подумайте о людях с эпилепсией, плохим зрением и т.д.

person Community    schedule 29.07.2010
comment
На самом деле, это не актуально. Так как он делает .each() в обернутом наборе, this в этом контексте — это всего лишь один элемент DOM. Обернув его в $(), он снова делает его набором jQuery, но это все еще один элемент. - person Tomas Aschan; 29.07.2010
comment
Если подумать, я думаю, что вы могли бы быть на что-то. Но было бы эффективнее заменить $(obj) на obj и просто выполнить перепаковку один раз. - person Tomas Aschan; 29.07.2010

В проводнике:

if($(obj).css("color") == "rgb(255, 0, 0)")

неверно, потому что IE видит это:

 $(obj).css("color") == "rgb(255,0,0)";

Без пробелов между цифрами.

Вы можете исправить это, изменив:

$(obj).css('color','rgb(255, 0, 0)');

$(obj).css('color','rgb(255,0,0)');

а также

if($(obj).css("color") == "rgb(255, 0, 0)")

to

if($(obj).css("color") == "rgb(255,0,0)")

so:

(function($)
{
    $.fn.blink = function(options) {
        var defaults = { delay:500 };
        var options = $.extend(defaults, options);

        return this.each(function() {
            var obj = $(this);
            setInterval(function() {
                if($(obj).css("color") == "rgb(255,0,0)")
                {
                    $(obj).css('color','#000000');
                }
                else
                {
                    $(obj).css('color','rgb(255,0,0)');
                }
            }, options.delay);
        });
    }
}(jQuery))
$(document).ready(function(){$('.blink').blink()})

ОТРЕДАКТИРОВАНО:

            (function($)
{
    $.fn.blink = function(options) {
        var defaults = { delay:500 };
        var options = $.extend(defaults, options);

        return this.each(function() {
            var obj = $(this);
            var state = false;
            setInterval(function() {
                if(state)
                {
                    $(obj).css('color','#000000');
                    state = false;
                }
                else
                {
                    $(obj).css('color','rgb(255,0,0)');
                    state = true;
                }
            }, options.delay);
        });
    }
}(jQuery))
person Peter Porfy    schedule 29.07.2010
comment
Отредактировано. В этом случае лучше проверить логическое значение. - person Peter Porfy; 29.07.2010

Вы проверяли код с помощью Firebug или встроенных инструментов разработчика в Chrome? Я ожидаю, что вам нужно изменить

}(jQuery))

в

})(jQuery)

(переместите скобки...)

person Tomas Aschan    schedule 29.07.2010