Как в jQuery сделать элемент "вспышкой"

Я новичок в jQuery и имею некоторый опыт использования Prototype. В Prototype есть способ «прошить» элемент - т.е. ненадолго выделите его другим цветом и сделайте так, чтобы он стал нормальным, чтобы внимание пользователя было обращено на него. Есть ли такой метод в jQuery? Я вижу fadeIn, fadeOut и animate, но не вижу ничего похожего на «вспышку». Может быть, один из этих трех можно использовать с соответствующими входами?

Это не отвечает на OP, но (слабо протестированный) код может быть полезен будущим поисковикам Google (например, мне): $.fn.flash = function(times, duration) { var T = this; times = times || 3; duration = duration || 200; for ( var i=0; i < times; i++ ) { (function() { setTimeout(function() { T.fadeOut(duration, function() { T.fadeIn(duration); }); }, i*duration*2+50); })(i); } };

Cory Mawhorter 23.03.2012 01:02

добавьте этот CSS в элемент: text-decoration:blink, затем удалите его.

Rafael Herscovici 29.11.2012 18:34
google.com/search?q=blink+html
Dylan Valade 27.08.2015 23:07

Я поместил здесь демонстрацию JSFiddle, которая, на мой взгляд, является лучшим ответом, чем я нашел на этой странице: stackoverflow.com/a/52283660/470749

Ryan 11.09.2018 23:22

Обратите внимание, что мигать официально не рекомендуется в пользу анимации. Проверить: w3.org/TR/2019/CR-css-text-decor-3-20190813/#valdef-text-dec‌ oration-line-blink

OrizG 23.08.2019 02:09
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
260
5
308 945
38

Ответы 38

Подходит ли плагин JQuery импульсный эффект (offline) для того, что вы ищете?

Вы можете добавить длительность для ограничения воздействия импульса по времени.


Как упоминал J-P в комментариях, теперь есть егообновлен плагин Pulse.
См. Его Репозиторий GitHub. А вот и демо.

Обновлен плагин Pulse: james.padolsey.com/javascript/simple-pulse-plugin-for-jquery

James 19.12.2009 13:06

Демо не работает, потому что js-библиотека, на которую она ссылается, не существует.

PandaWood 27.07.2012 08:35

@PandaWood Я восстановил ссылку на репозиторий GitHub и обновил демо

VonC 27.07.2012 09:59

Думаю, вы могли бы использовать эффект выделения в пользовательском интерфейсе jQuery для достижения того же.

Это часть jQueryUI, которая довольно тяжелая, а не часть стандартной библиотеки jQuery (хотя вы могли бы просто использовать ядро ​​эффектов пользовательского интерфейса, на которое оно полагается).

UpTheCreek 22.12.2010 16:18

Вы можете скачать только ядро ​​эффектов + желаемый эффект, который для «выделения» + «пульсирует» составляет 12 КБ. Не совсем легкий, но и не такой тяжелый.

Roman Starkov 09.09.2011 04:49

Вы можете использовать этот плагин (поместите его в файл js и используйте его через тег-скрипт)

http://plugins.jquery.com/project/color

А затем используйте что-то вроде этого:

jQuery.fn.flash = function( color, duration )
{

    var current = this.css( 'color' );

    this.animate( { color: 'rgb(' + color + ')' }, duration / 2 );
    this.animate( { color: current }, duration / 2 );

}

Это добавляет метод flash ко всем объектам jQuery:

$( '#importantElement' ).flash( '255,0,0', 1000 );

Вы можете использовать Плагин jQuery Color.

Например, чтобы привлечь внимание ко всем div на вашей странице, вы можете использовать следующий код:

$("div").stop().css("background-color", "#FFFF9C")
    .animate({ backgroundColor: "#FFFFFF"}, 1500);

Изменить - Новое и улучшенное

Ниже используется тот же метод, что и выше, но он имеет дополнительные преимущества:

  • параметризованный цвет и продолжительность выделения
  • сохраняя исходный цвет фона, вместо того, чтобы предполагать, что он белый
  • является расширением jQuery, поэтому вы можете использовать его на любом объекте

Расширьте объект jQuery:

var notLocked = true;
$.fn.animateHighlight = function(highlightColor, duration) {
    var highlightBg = highlightColor || "#FFFF9C";
    var animateMs = duration || 1500;
    var originalBg = this.css("backgroundColor");
    if (notLocked) {
        notLocked = false;
        this.stop().css("background-color", highlightBg)
            .animate({backgroundColor: originalBg}, animateMs);
        setTimeout( function() { notLocked = true; }, animateMs);
    }
};

Пример использования:

$("div").animateHighlight("#dd0000", 1000);

К сожалению, в jQuery есть ошибка, которая периодически препятствует изменению цвета -> dev.jqueryui.com/ticket/4251

curthipster 18.07.2009 01:37

это довольно универсально (вы можете анимировать любое свойство, например цвет, вместо backgroundColor). На самом деле есть ошибка, но если этот эффект только для красоты, достаточно обернуть вызов блоком try-catch: если он не удастся, он не будет отображаться, но и не вызовет ошибок. .

Palantir 14.10.2009 11:14

Если кому-то интересно ... теперь это работает! (проверено в FF, Safari, Chrome)

Ryan Ferretti 19.10.2010 01:01

У меня тоже не работает - вы уверены, что это не зависит от плагина цветной анимации? plugins.jquery.com/project/color

UpTheCreek 18.12.2010 17:58

Из документации jquery на .animate (): Все анимированные свойства должны иметь одно числовое значение (за исключением случаев, указанных ниже); нечисловые свойства не могут быть анимированы с использованием основных функций jQuery. (Например, ширина, высота или левая часть могут быть анимированы, а цвет фона - нет.) Итак, я предполагаю, что вы используете плагин, не осознавая этого.

UpTheCreek 18.12.2010 18:17

@UpTheCreek хороший улов. Мой проект также зависит от пользовательского интерфейса jQuery, который добавляет возможность анимировать цвет (jqueryui.com/docs/Effects/Methods#Color_Transitions). Однако, как указывает ниже другой пользователь, jQuery теперь предоставляет эффект, называемый «выделение», который обеспечивает ту же функциональность.

curthipster 22.12.2010 01:22

@colbeerhey: К сожалению, этот эффект выделения является частью JQueryUI (основные эффекты), вы не можете использовать его только с jquery.

UpTheCreek 22.12.2010 16:18

Я заметил, что он не вернул объект. Я попытался сложить этот небольшой эффект (например, $ ("# qtyonhand"). AnimateHighlight ("# c3d69b", 1500) .delay (1500) .animateHighlight ("# 76923C", 5000);) и получил ошибку. Мне нужно было добавить «вернуть это»; до конца метода.

Sage 14.05.2011 16:13

Я многое узнал о создании функций jquery благодаря вашему сообщению. Спасибо!

willdanceforfun 14.09.2011 13:22

Это действительно работает. Требуется jQuery UI. Также обратите внимание, что в браузерах, поддерживающих полупрозрачные цвета фона (rgba), стабильная версия jQuery UI не поддерживает и не будет правильно анимировать. Кроме того, использование addClass('class', 1000) приведет к анимации элемента для этого класса.

Nick Caballero 06.07.2012 06:29

Мусор. Не работает с последним пользовательским интерфейсом jQuery.

Steve K 02.08.2012 16:21

У меня работал с jquery-1.7.2 и jquery-ui-1.8.22.

anon 03.08.2012 01:22

Вы все кучка ненавистников. Это работает нормально, убедитесь, что вы не помещаете объявление своей функции в функцию document.ready. Это НЕ зависит от jquery-ui: методы .animate () и .stop () являются собственными для jquery.

Pandincus 08.08.2012 00:14

Официальные документы jQuery говорят, что вы должны использовать плагин jQuery.Color (), чтобы это работало: github.com/jquery/jquery-color

jchook 12.12.2012 08:58

Из документации jquery .animate: Note: The jQuery UI project extends the .animate() method by allowing some non-numeric styles such as colors to be animated. - Если вы хотите анимировать цвет, вам НУЖЕН пользовательский интерфейс jQuery или какой-либо другой плагин.

Adam Tomat 09.04.2013 11:53

Какого черта, неправильная информация о SO с + 77 / -15? Что это? Никто не захотел редактировать этот ответ? Я делаю это прямо сейчас ...

MarioDS 16.05.2013 11:48

Я пробовал это с элементом <select> ... изменил цвет, но не вернул его обратно.

Menelaos 27.06.2013 11:32

ммм ... как насчет того, чтобы кто-то, кто может заставить эту работу, сделать для нее jsfiddle?

Simon_Weaver 30.06.2013 09:53

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

Ascherer 05.08.2013 06:10

Ээк! Это сработало в консоли StackOverflow.com, но не на моем сайте и не в JSFiddle! Теперь мой голос заблокирован, и я не могу проголосовать против! jsfiddle.net/Xp4k2

Chloe 12.05.2014 08:16

Приведенный выше код работает, вам просто нужно включить плагин jQuery Color, как говорится в сообщении.

Guido Visser 23.02.2018 17:52

Если вы используете jQueryUI, в pulsate есть функция UI/Effects.

$("div").click(function () {
      $(this).effect("pulsate", { times:3 }, 2000);
});

http://docs.jquery.com/UI/Effects/Pulsate

@DavidYell, откройте новый вопрос и опубликуйте образец кода. pulsate отлично работает в Chrome.

SooDesuNe 03.02.2011 05:08

Мигает каждые 5 секунд: setInterval (function () {$ (". Red-flag"). Effect ("pulsate", {times: 3}, 2000);}, 5000);

Adrian P. 10.08.2013 02:45

@all Кто-нибудь теперь использует анимацию и / или преобразование css3? В любом случае приятно (но все же я предпочитаю css3, как в одном из других ответов)

Martin Meeser 30.07.2014 22:02

Есть обходной путь для ошибки анимированного фона. Эта суть включает пример простого метода выделения и его использования.

/* BEGIN jquery color */
  (function(jQuery){jQuery.each(['backgroundColor','borderBottomColor','borderLeftColor','borderRightColor','borderTopColor','color','outlineColor'],function(i,attr){jQuery.fx.step[attr]=function(fx){if (!fx.colorInit){fx.start=getColor(fx.elem,attr);fx.end=getRGB(fx.end);fx.colorInit=true;}
  fx.elem.style[attr] = "rgb("+[Math.max(Math.min(parseInt((fx.pos*(fx.end[0]-fx.start[0]))+fx.start[0]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[1]-fx.start[1]))+fx.start[1]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[2]-fx.start[2]))+fx.start[2]),255),0)].join(",")+")";}});function getRGB(color){var result;if (color&&color.constructor==Array&&color.length==3)
  return color;if (result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
  return[parseInt(result[1]),parseInt(result[2]),parseInt(result[3])];if (result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
  return[parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55];if (result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
  return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)];if (result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
  return[parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)];if (result=/rgba\(0, 0, 0, 0\)/.exec(color))
  return colors['transparent'];return colors[jQuery.trim(color).toLowerCase()];}
  function getColor(elem,attr){var color;do{color=jQuery.curCSS(elem,attr);if (color!=''&&color!='transparent'||jQuery.nodeName(elem,"body"))
  break;attr = "backgroundColor";}while(elem=elem.parentNode);return getRGB(color);};var colors = {aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};})(jQuery);
  /* END jquery color */


  /* BEGIN highlight */
  jQuery(function() {
    $.fn.highlight = function(options) {
      options = (options) ? options : {start_color:"#ff0",end_color:"#fff",delay:1500};
      $(this).each(function() {
        $(this).stop().css({"background-color":options.start_color}).animate({"background-color":options.end_color},options.delay);
      });
    }
  });
  /* END highlight */

  /* BEGIN highlight example */
  $(".some-elements").highlight();
  /* END highlight example */

https://gist.github.com/1068231

Я пользуюсь этим. хотя еще не проверено на всех браузерах. просто измените это так, как вам нравится,

использование: hlight($("#mydiv"));

function hlight(elementid){
    var hlight= "#fe1414"; //set the hightlight color
    var aspeed= 2000; //set animation speed
    var orig= "#ffffff"; // set default background color
    elementid.stop().css("background-color", hlight).animate({backgroundColor: orig}, aspeed);
}

ПРИМЕЧАНИЕ: вам нужен пользовательский интерфейс jquery, добавленный в ваш заголовок.

Не могу поверить, что это еще не вопрос. Все, что вам нужно сделать:

("#someElement").show('highlight',{color: '#C8FB5E'},'fast');

Это делает именно то, что вы хотите, очень просто, работает как для методов show(), так и для hide().

Примечание: чтобы это работало, вам нужно добавить эффекты jquery ui. это не часть ядра jQuery

travis-146 03.10.2011 23:24

Вот немного улучшенная версия решения colbeerhey. Я добавил оператор return, чтобы в истинной форме jQuery мы связывали события после вызова анимации. Я также добавил аргументы для очистки очереди и перехода к концу анимации.

// Adds a highlight effect
$.fn.animateHighlight = function(highlightColor, duration) {
    var highlightBg = highlightColor || "#FFFF9C";
    var animateMs = duration || 1500;
    this.stop(true,true);
    var originalBg = this.css("backgroundColor");
    return this.css("background-color", highlightBg).animate({backgroundColor: originalBg}, animateMs);
};

Примечание: анимация цветов фона требует использования плагина пользовательского интерфейса цветов. см .: api.jquery.com/animate

Martlark 28.05.2014 11:11

Мой способ .fadein, .fadeout .fadein, .fadeout ......

$("#someElement").fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100);

function go1() { $("#demo1").fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100)}

function go2() { $('#demo2').delay(100).fadeOut().fadeIn('slow') }
#demo1,
#demo2 {
  text-align: center;
  font-family: Helvetica;
  background: IndianRed;
  height: 50px;
  line-height: 50px;
  width: 150px;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button onclick = "go1()">Click Me</button>
<div id='demo1'>My Element</div>
<br>
<button onclick = "go2()">Click Me</button> (from comment)
<div id='demo2'>My Element</div>

Не самое красивое решение, но короткое, легкое для понимания и не требующее UI / эффектов. Хороший!

Chris Jaynes 13.08.2012 19:19

Я использую задержку перед последовательностью fadeIn, fadeOut, что-то вроде $('..').delay(100).fadeOut().fadeIn('slow')

alexandru.topliceanu 30.08.2012 18:34

мигающий фон часто выглядит липким или просто раздражающим, особенно если элемент, который вы мигаете, находится на простом белом фоне. сначала попробуйте это, прежде чем добавлять плагины цвета, прошивать фон и т. д.

Simon_Weaver 30.06.2013 10:19

Проблема с этим методом в том, что эти события могут наступать друг на друга. Вероятно, вам следует поместить каждый последующий fadeIn и fadeOut в их соответствующие обратные вызовы. Например: var $someElement = $("#someElement"); $someElement.fadeIn(100, function(){ $someElement.fadeOut(100, function(){ /*...etc...*/ }) })

thekingoftruth 01.10.2013 00:39

Остерегайтесь использовать это в коде проверки, который может вызываться часто. Если код вызывается в правильное время, вы можете получить элемент, показывающий, когда он не должен (или наоборот)

Chris Pfohl 14.10.2014 21:46

Вы можете расширить метод Дешенга Ли, позволив счетчику итераций выполнять несколько миганий следующим образом:

// Extend jquery with flashing for elements
$.fn.flash = function(duration, iterations) {
    duration = duration || 1000; // Default to 1 second
    iterations = iterations || 1; // Default to 1 iteration
    var iterationDuration = Math.floor(duration / iterations);

    for (var i = 0; i < iterations; i++) {
        this.fadeOut(iterationDuration).fadeIn(iterationDuration);
    }
    return this;
}

Затем вы можете вызвать метод с указанием времени и количества вспышек:

$("#someElementId").flash(1000, 4); // Flash 4 times over a period of 1 second

Изменен на var iterationDuration = Math.floor(duration / iterations);, чтобы вы могли делить на нечетные числа, и сделал его return this;, чтобы вы могли связать другие методы после него.

user1477388 20.07.2014 20:02

Но это на самом деле ничего не меняет цвет?

nights 08.09.2014 15:34

Если включение библиотеки является излишним, вот решение, которое гарантированно будет работать.

$('div').click(function() {
    $(this).css('background-color','#FFFFCC');
    setTimeout(function() { $(this).fadeOut('slow').fadeIn('slow'); } , 1000); 
    setTimeout(function() { $(this).css('background-color','#FFFFFF'); } , 1000); 
});
  1. Настройка триггера события

  2. Установите цвет фона блочного элемента

  3. Внутри setTimeout используйте fadeOut и fadeIn, чтобы создать небольшой эффект анимации.

  4. Внутри второго setTimeout сбросить цвет фона по умолчанию

    Протестировано в нескольких браузерах, работает нормально.

Вы можете использовать анимацию css3 для прошивки элемента

.flash {
  -moz-animation: flash 1s ease-out;
  -moz-animation-iteration-count: 1;

  -webkit-animation: flash 1s ease-out;
  -webkit-animation-iteration-count: 1;

  -ms-animation: flash 1s ease-out;
  -ms-animation-iteration-count: 1;
}

@keyframes flash {
    0% { background-color: transparent; }
    50% { background-color: #fbf8b2; }
    100% { background-color: transparent; }
}

@-webkit-keyframes flash {
    0% { background-color: transparent; }
    50% { background-color: #fbf8b2; }
    100% { background-color: transparent; }
}

@-moz-keyframes flash {
    0% { background-color: transparent; }
    50% { background-color: #fbf8b2; }
    100% { background-color: transparent; }
}

@-ms-keyframes flash {
    0% { background-color: transparent; }
    50% { background-color: #fbf8b2; }
    100% { background-color: transparent; }
}

И вы jQuery, чтобы добавить класс

jQuery(selector).addClass("flash");

Хорошее решение, если нужно сработать только один раз. После добавления класса последующее добавление класса (логически) не приводит к миганию элемента.

simon 08.03.2013 11:54

Лучшая идея на свете. Я использовал settimeout, чтобы удалить класс через 2 секунды после эффекта

insign 24.08.2013 21:44

Вот пример удаления класса после завершения анимации, чтобы вы могли продолжать его мигать. jsfiddle.net/daCrosby/eTcXX/1

DACrosby 11.04.2014 05:05

Отлично, это работает, но обратите внимание, что правильное свойство для background-color - «transparent» вместо «none», если вы хотите передать валидатор таблицы стилей.

Jan M 16.12.2014 13:28

Похоже, что Chrome больше не реагирует на префикс -webkit, поэтому требуется at-правило @keyframes.

kmurph79 01.12.2015 09:51

Обратите внимание, что все современные браузеры теперь поддерживают обычные правила @keyframes и animation, поэтому нет необходимости использовать какие-либо версии с префиксом, кроме может быть-webkit- (для браузера Blackberry).

coredumperror 17.10.2017 02:14

Мне нравятся решения CSS, но для прошивки требуется много кода по сравнению с javascript. Тем более, что вы все равно используете jQuery.

mmarlow 03.09.2018 17:44

Очевидное примечание, но полезно упомянуть: это будет выглядеть так, как будто это не работает, если дочерние элементы уже имеют фон!

mavrosxristoforos 26.10.2020 21:41
$('#district').css({opacity: 0});
$('#district').animate({opacity: 1}, 700 );

Это просто и элегантно.

Gra 13.04.2014 12:23

Хотя использование fadeIn и fadeOut влияет на другие элементы-братья, потому что переключает свойство css display, в моем случае это выглядит странно. Но это решает проблему. Спасибо, работает элегантно, как шарм.

fsevenm 30.03.2020 07:24

У меня работают следующие коды. Определите две функции постепенного появления и исчезновения и поместите их в обратный вызов друг друга.

var fIn = function() { $(this).fadeIn(300, fOut); };
var fOut = function() { $(this).fadeOut(300, fIn); };
$('#element').fadeOut(300, fIn);

Следующее контролирует время мигания:

var count = 3;
var fIn = function() { $(this).fadeIn(300, fOut); };
var fOut = function() { if (--count > 0) $(this).fadeOut(300, fIn); };
$('#element').fadeOut(300, fIn);

Это может быть более актуальный ответ и короче, поскольку после этого поста все несколько консолидировалось. Требуется jQuery-UI-эффект-подсветка.

$("div").click(function () {
  $(this).effect("highlight", {}, 3000);
});

http://docs.jquery.com/UI/Effects/Highlight

Я нашел это много лун позже, но если кому-то интересно, похоже, это хороший способ заставить что-то мигать постоянно:

$( "#someDiv" ).hide();

setInterval(function(){
     $( "#someDiv" ).fadeIn(1000).fadeOut(1000);
},0)

Эта функция заставляет его мигать. Он должен использовать cssHooks из-за возврата по умолчанию функции фоновый цвет rgb.

Надеюсь, это поможет!

$.cssHooks.backgroundColor = {
get: function(elem) {
    if (elem.currentStyle)
        var bg = elem.currentStyle["backgroundColor"];
    else if (window.getComputedStyle)
        var bg = document.defaultView.getComputedStyle(elem,
            null).getPropertyValue("background-color");
    if (bg.search("rgb") == -1)
        return bg;
    else {
        bg = bg.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
        function hex(x) {
            return ("0" + parseInt(x).toString(16)).slice(-2);
        }
        return "#" + hex(bg[1]) + hex(bg[2]) + hex(bg[3]);
    }
}
}
function blink(element,blinkTimes,color,originalColor){
    var changeToColor;
    if (blinkTimes === null || blinkTimes === undefined)
        blinkTimes = 1;
    if (!originalColor || originalColor === null || originalColor === undefined)
        originalColor = $(element).css("backgroundColor");
    if (!color || color === null || color === undefined)
        color = "#ffffdf";
    if ($(element).css("backgroundColor") == color){
        changeToColor = originalColor;
    }else{
        changeToColor = color;
        --blinkTimes;
    }
    if (blinkTimes >= 0){
        $(element).animate({
            "background-color": changeToColor,
        }, {
            duration: 500,
            complete: function() {
                blink(element, blinkTimes, color, originalColor);
                return true;
            }
        });
    }else{
        $(element).removeAttr("style");
    }
    return true;
}

Я искал решение этой проблемы, но не полагался на jQuery UI.

Это то, что я придумал, и это работает для меня (без плагинов, только Javascript и jQuery); - Вот рабочая рабочий пример - http://jsfiddle.net/CriddleCraddle/yYcaY/2/

Установите текущий параметр CSS в вашем файле CSS как обычный css и создайте новый класс, который просто обрабатывает параметр для изменения, т.е. background-color, и установите для него значение '! Important', чтобы переопределить поведение по умолчанию. нравится...

.button_flash {
background-color: #8DABFF !important;
}//This is the color to change to.  

Затем просто используйте приведенную ниже функцию и передайте элемент DOM в виде строки, целое число, указывающее количество раз, которое вы хотите, чтобы сработала вспышка, класс, на который вы хотите перейти, и целое число для задержки.

Примечание. Если вы передадите четное число для переменной times, вы получите класс, с которого начали, а если вы передадите нечетное число, вы получите класс с переключением. Оба они полезны для разных целей. Я использую «i», чтобы изменить время задержки, иначе они все сработали бы одновременно, и эффект был бы потерян.

function flashIt(element, times, klass, delay){
  for (var i=0; i < times; i++){
    setTimeout(function(){
      $(element).toggleClass(klass);
    }, delay + (300 * i));
  };
};

//Then run the following code with either another delay to delay the original start, or
// without another delay.  I have provided both options below.

//without a start delay just call
flashIt('.info_status button', 10, 'button_flash', 500)

//with a start delay just call
setTimeout(function(){
  flashIt('.info_status button', 10, 'button_flash', 500)
}, 4700);
// Just change the 4700 above to your liking for the start delay.  In this case, 
//I need about five seconds before the flash started.  

Как насчет действительно простого ответа?

$('selector').fadeTo('fast',0).fadeTo('fast',1).fadeTo('fast',0).fadeTo('fast',1)

Мигает дважды ... это все, ребята!

Он не мигает другим цветом (который был запрошен), а просто увеличивает и уменьшает непрозрачность.

Tim Eckel 17.07.2017 17:09

Это будет пульсировать цвет фона элемента до тех пор, пока не будет запущено событие наведения курсора мыши.

$.fn.pulseNotify = function(color, duration) {

var This = $(this);
console.info(This);

var pulseColor = color || "#337";
var pulseTime = duration || 3000;
var origBg = This.css("background-color");
var stop = false;

This.bind('mouseover.flashPulse', function() {
    stop = true;
    This.stop();
    This.unbind('mouseover.flashPulse');
    This.css('background-color', origBg);
})

function loop() {
    console.info(This);
    if ( !stop ) {
        This.animate({backgroundColor: pulseColor}, pulseTime/3, function(){
            This.animate({backgroundColor: origBg}, (pulseTime/3)*2, 'easeInCirc', loop);
        });
    }
}

loop();

return This;
}

Через 5 лет ... (И никаких дополнительных плагинов не требуется)

Этот "пульсирует" его до желаемого цвета (например, белого) с помощью цвета размещение фона div позади него, а затем выцветание объекта снова и снова.

Объект HTML (например, кнопка):

<div style = "background: #fff;">
  <input type = "submit" class = "element" value = "Whatever" />
</div>

jQuery (ваниль, никаких других плагинов):

$('.element').fadeTo(100, 0.3, function() { $(this).fadeTo(500, 1.0); });

элемент - название класса

первое число в fadeTo() - миллисекунды на переход

второй номер в fadeTo() - непрозрачность объекта после затухания / затухания

Вы можете проверить это в правом нижнем углу этой веб-страницы: https://single.majlovesreg.one/v1/

Редактировать (willsteel) нет дублированного селектора с использованием $ (this) и измененных значений для фактического выполнения вспышки (по запросу OP).

fadeTo(0000) - Металлика
vulcan raven 28.11.2014 12:43

Гладкая, как масло! Лучшее решение из всех. Спасибо!

Caio Mar 14.06.2015 18:40

как сделать это бесконечное?

tomexsans 25.08.2015 10:38

Ссылка в примере не работает.

meshy 25.01.2018 17:47

Отличное и простое решение jQuery.

Jason 01.05.2018 18:34

По какой-то причине fadeIn и fadeOut не работали. Но fadeTo сделал для меня! Ваше здоровье!

NeonNatureEX 21.03.2019 13:19

@tomexsans $.fn.flashUnlimited=function(){$(this).fadeTo('medium',0.3,f‌​unction(){$(this).fa‌​deTo('medium',1.0,$(‌​this).flashUnlimited‌​);});} Затем вы можете назвать его как $('#mydiv').flashUnlimited(); - он выполняет то, что Majal ответил выше, и вызывает себя снова в конце цикла.

Jay Dadhania 24.09.2019 04:17

К сожалению, для верхнего ответа требуется JQuery UI. http://api.jquery.com/animate/

Вот ванильное решение JQuery

http://jsfiddle.net/EfKBg/

JS

var flash = "<div class='flash'></div>";
$(".hello").prepend(flash);
$('.flash').show().fadeOut('slow');

CSS

.flash {
    background-color: yellow;
    display: none;
    position: absolute;
    width: 100%;
    height: 100%;
}

HTML

<div class = "hello">Hello World!</div>

Если вы просто сделаете flash объектом jQuery, он будет работать нормально. var flash = $("<div class='flash'></div>"); $(".hello").prepend(flash); flash.show().fadeOut('slow');

Michael Blackburn 13.11.2014 23:32

Соберите это из всего вышеперечисленного - простое решение для перепрошивки элемента и возврата к исходному цвету bg ...

$.fn.flash = function (highlightColor, duration, iterations) {
    var highlightBg = highlightColor || "#FFFF9C";
    var animateMs = duration || 1500;
    var originalBg = this.css('backgroundColor');
    var flashString = 'this';
    for (var i = 0; i < iterations; i++) {
        flashString = flashString + '.animate({ backgroundColor: highlightBg }, animateMs).animate({ backgroundColor: originalBg }, animateMs)';
    }
    eval(flashString);
}

Используйте так:

$('<some element>').flash('#ffffc0', 1000, 3);

Надеюсь это поможет!

Остерегайтесь злого eval!

Birla 16.07.2014 15:58

Я знаю, мне просто нужно было быстрое и грязное решение. Eval иногда находит применение!

Duncan 17.07.2014 17:05

Лучше всего сделать так:

<script>

setInterval(function(){

    $(".flash-it").toggleClass("hide");

},700)
</script>

Вот решение, в котором используется сочетание анимации jQuery и CSS3.

http://jsfiddle.net/padfv0u9/2/

По сути, вы начинаете с изменения цвета на свой «мигающий» цвет, а затем используете анимацию CSS3, чтобы позволить цвету исчезнуть. Вам нужно изменить длительность перехода, чтобы начальная «вспышка» была быстрее, чем затухание.

$(element).removeClass("transition-duration-medium");
$(element).addClass("transition-duration-instant");
$(element).addClass("ko-flash");
setTimeout(function () {
    $(element).removeClass("transition-duration-instant");
    $(element).addClass("transition-duration-medium");
    $(element).removeClass("ko-flash");
}, 500);

Где классы CSS следующие.

.ko-flash {
    background-color: yellow;
}
.transition-duration-instant {
    -webkit-transition-duration: 0s;
    -moz-transition-duration: 0s;
    -o-transition-duration: 0s;
    transition-duration: 0s;
}
.transition-duration-medium {
    -webkit-transition-duration: 1s;
    -moz-transition-duration: 1s;
    -o-transition-duration: 1s;
    transition-duration: 1s;
}

При работе с jQuery 1.10.2 он дважды вызывает раскрывающийся список и заменяет текст на ошибку. Он также сохраняет значения измененных атрибутов для их восстановления.

// shows the user an error has occurred
$("#myDropdown").fadeOut(700, function(){
    var text = $(this).find("option:selected").text();
    var background = $(this).css( "background" );

    $(this).css('background', 'red');
    $(this).find("option:selected").text("Error Occurred");

        $(this).fadeIn(700, function(){
            $(this).fadeOut(700, function(){
                $(this).fadeIn(700, function(){
                    $(this).fadeOut(700, function(){

                        $(this).find("option:selected").text(text);
                        $(this).css("background", background);
                        $(this).fadeIn(700);
                    })
                })
            })
        })
});

Выполняется через обратные вызовы - чтобы не пропустить ни одну анимацию.

просто дайте elem.fadeOut (10) .fadeIn (10);

Создайте два класса, задав каждому цвет фона:

.flash{
 background: yellow;
}

.noflash{
 background: white;
}

Создайте div с одним из этих классов:

<div class = "noflash"></div>

Следующая функция переключит классы и заставит их мигать:

var i = 0, howManyTimes = 7;
function flashingDiv() {
    $('.flash').toggleClass("noFlash")
    i++;
    if ( i <= howManyTimes ){
        setTimeout( f, 200 );
    }
}
f();

Вы можете использовать эту классную библиотеку для создания любого анимационного эффекта на вашем элементе: http://daneden.github.io/animate.css/

Это достаточно общий характер, чтобы вы могли написать любой код, который хотите анимировать. Вы даже можете уменьшить задержку с 300 мс до 33 мс, затемнить цвета и т. д.

// Flash linked to hash.
var hash = location.hash.substr(1);
if (hash) {
    hash = $("#" + hash);
    var color = hash.css("color"), count = 1;
    function hashFade () {
        if (++count < 7) setTimeout(hashFade, 300);
        hash.css("color", count % 2 ? color : "red");
    }
    hashFade();
}

Чистое решение jQuery.

(не требуется jquery-ui / animate / color.)

Если все, что вам нужно, это желтая «вспышка» без загрузки цвета jquery:

var flash = function(elements) {
  var opacity = 100;
  var color = "255, 255, 20" // has to be in this format since we use rgba
  var interval = setInterval(function() {
    opacity -= 3;
    if (opacity <= 0) clearInterval(interval);
    $(elements).css({background: "rgba("+color+", "+opacity/100+")"});
  }, 30)
};

Вышеупомянутый скрипт просто затухает желтым цветом на 1 секунду, что идеально подходит для того, чтобы дать пользователю знать, что элемент был обновлен или что-то подобное.

Использование:

flash($('#your-element'))

Мне нравится это решение, за исключением того, что фон не возвращается к тому, что было раньше.

MrPHP 15.07.2018 09:12

Как и fadein / fadeout, вы можете использовать анимацию css / delay

$(this).stop(true, true).animate({opacity: 0.1}, 100).delay(100).animate({opacity: 1}, 100).animate({opacity: 0.1}, 100).delay(100).animate({opacity: 1}, 100);

Простой и гибкий

function pulse() {
    $('.blink').fadeIn(300).fadeOut(500);
}
setInterval(pulse, 1000);

Точно. Простой и полный контроль над появлением и затуханием.

pollaris 10.10.2017 04:37
$("#someElement").fadeTo(3000, 0.3 ).fadeTo(3000, 1).fadeTo(3000, 0.3 ).fadeTo(3000, 1); 

3000 это 3 секунды

От непрозрачности 1 он уменьшается до 0,3, затем до 1 и так далее.

Вы можете сложить их больше.

Нужен только jQuery. :)

вы можете использовать плагин jquery Pulsate, чтобы заставить сосредоточить внимание на любом элементе html с контролем над скоростью, повторением и цветом.

JQuery.pulsate ()* with Demos

инициализатор образца:

  • $ (". pulse4"). pulsate ({скорость: 2500})
  • $ (". Кнопка CommandBox: видимая"). Pulsate ({color: "# f00", скорость: 200, досягаемость: 85, повторение: 15})

Прямой jquery, без плагинов. Он мигает указанное количество раз, меняет цвет фона во время мигания, а затем снова меняет его.

function blink(target, count, blinkspeed, bc) {
    let promises=[];
    const b=target.css(`background-color`);
    target.css(`background-color`, bc||b);
    for (i=1; i<count; i++) {
            const blink = target.fadeTo(blinkspeed||100, .3).fadeTo(blinkspeed||100, 1.0);
            promises.push(blink);
    }
    // wait for all the blinking to finish before changing the background color back
    $.when.apply(null, promises).done(function() {
            target.css(`background-color`, b);
    });
    promises=undefined;
}

Пример:

blink($(`.alert-danger`), 5, 200, `yellow`);

вы можете использовать этот код :) изменить значение мили для изменения скорости анимации

var mili = 300
for (var i = 2; i < 8; i++) {
   if (i % 2 == 0) {
      $("#lblTransferCount").fadeOut(mili)
   } else {
      $("#lblTransferCount").fadeIn(mili)
   }
}

Другие вопросы по теме