2010-07-29 3 views
3

Я хочу, чтобы моргнуть текст меню. У меня есть этот код, но он не работает с IE.Как я могу моргнуть с помощью jQuery?

(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()}) 

Может мне помочь? Спасибо!

+5

вы должны быть в состоянии сделать это инстинктивно, когда ваши глаза сохнут .. –

+0

Единственный способ мигнутия не используя мигание. Читайте: мои глаза горят! – 2010-07-29 10:34:33

+0

Знает ли IE rgb (,,)? Поскольку IE более глупый, чем камень, я бы сказал «да». В этом случае я был бы счастлив при использовании IE :) – 2010-07-29 10:40:09

ответ

5

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

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

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

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

$(".selector").blink(); 
+0

Будет ли это работать часто? – Nathaniel

+0

Вы имеете в виду мигающую скорость (довольно уверен, что это то же самое, что и метод blink в основной библиотеке эффектов пользовательского интерфейса) или кроссбраузерная точность или нет? – doug

+1

Новая версия: http://labs.wondergroup.com/demos/mini-ui/index.html – Kemo

2

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

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

obj = $(this); 

С только

obj = this; 

Но до сих пор думаю о людях с epileption, плохой видимости и т.д.

+1

Собственно, это не имеет значения. Так как он '.each()' на завернутом наборе, 'this' в этом контексте является всего лишь одним элементом DOM. Обернув его в '$()', он снова добавит jQuery, но это все еще только один элемент. –

+0

С другой стороны, я думаю, что вы можете что-то сказать. Но было бы более эффективно заменить '$ (obj)' на 'obj' вместо этого и просто выполнить повторную упаковку один раз. –

0

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

}(jQuery)) 

в

})(jQuery) 

(переместить скобки вокруг ...)

+0

Оба способа действительны. – JotaBe

1

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

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)") 

в

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

так:

(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)) 
+0

Спасибо, но теперь он не работает с FireFox. – Nathaniel

+0

Отредактировано. В этом случае лучше проверить логическое значение. –

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