Я разобрался с решением.Хотя не уверен, что я доволен этим.По сути, это очень плохая «перезагрузка» CSS при нажатии show
Анимация зацикливается вечно.Поэтому я не могу положиться на очередь jQuery (конечной длины).Я должен достичь цикла с помощью обратного вызова, как показано в коде.Проблема, которая вызывает: вы не можете .stop(true, true)
.Первое значение true очищает очередь, но в ней ничего нет после анимации, которая в данный момент выполняется.Так что это бесполезно.Второй истинный переход к последней анимации в очереди.Опять бесполезно, так как на самом деле мы собираемся оставаться в одной вещи, которая зацикливается на себе.2-й аргумент должен быть false
, чтобы прервать бесконечный цикл.
Проблема с прерыванием.Он оставляет CSS там, где он есть.Теперь вы застряли со случайными css-реквизитами на том, что ваша анимация интерполировала (в моем случае background-color
).Также я хотел, чтобы прерывание было мгновенным.Таким образом, другого пути не было.
В моем случае background-color
во время анимации был установлен на element.style
(обнаружен при проверке в инструментах браузера), который переопределяет все, что происходит.Эта опора не существовала, пока не запустилась первая анимация.Затем он был прерван, и предполагаемый временный стиль застрял там (я думаю).
Итак, вы снова запускаете анимацию.Зеленый класс применяется.JQuery выясняет диапазон цветов для прохождения.Получается из #shadeofgreen в #thesameshadeofgreen, потому что застрявшее значение element.styles
переопределяет все, что предоставляется классом.Таким образом, анимация скользит между двумя одинакового цвета.Это работает!Но цвет изменить нельзя.
Так что исправление в моем случае не ужасно, но я все еще не уверен, что мне это нравится, потому что я не уверен, что его можно легко применить к различнымситуаций.
Измените
$('div').stop(true, false).hide().addClass('green').fadeIn('slow', pulse)
на
$('div').stop(true, false).removeAttr('style').hide().addClass('green').fadeIn('slow', pulse)
Ключ -
.removeAttr('style').hide().addClass('green')
Это, по сути, ваш сброс CSS.Гарантируется, что он всегда будет там, когда вам это нужно, поскольку это происходит ровно до того, как вещь снова отобразится.
Обратите внимание, что установка !important
на цвет в классе green
css не работает, потому чтоэто (кажется) переопределит element.styles
(который использует анимация jQuery), и вы не получите желаемый результат.
Конечно, я все еще открыт для предложений.Я, вероятно, что-то упустил, так как я только начал смотреть на CSS и jQuery в начале недели.
Вы можете увидеть влияние .removeAttr('style')
в фиксированном коде здесь на jsbin .