Преамбула: возможный дубликат моего вопроса можно найти здесь, хотя для меня этот вопрос не получил достаточного ответа. Дается обход, но окончательный ответ на вопрос о том, возможно ли это, не предоставляется.
Вопрос: на моем веб-сайте, когда пользователь нажимает кнопку (или область экрана), я хочу, чтобы эта область "вспыхивала" пару раз, прежде чем вернуться в исходное состояние. (Я думаю, что это дает пользователю уверенное ощущение того, что что-то активировано, так как в некоторых случаях у них может быть небольшая задержка до того, как будет дана обратная связь.)
Во всяком случае, мне удалось получить эту работу, используя немного JavaScript и jQuery, и вы можете увидеть результаты здесь >>.
Как вы можете заметить, проблема в том, что после выполнения мигания элемент не возвращается в исходное состояние. Скорее, он сохраняет свое последнее состояние "flash" и переопределяет базовый стиль CSS, который изначально стилирует объект при загрузке страницы.
Я стилю элемент со следующим jQuery:
$jq_obj.css('background-color',flash_fg_color_).css('color',flash_bg_color_);
И я пытаюсь "не стирать" его:
$jq_obj.removeAttr('background-color').removeAttr('color');
Я также пробовал :;
$jq_obj.css('background-color','').css('color','');
Несмотря на документацию, говорящую, что это должно удалить стиль, это не так.
Есть ли решение, или мне нужно вернуться к решению для работы, упомянутому в моей преамбуле? Самое приятное в опции JavaScript заключается в том, что он становится намного более универсальным, если вы хотите немного поиграть с анимацией.
Благодаря,
=== EDIT 2014-06-28 ===
В качестве демонстрации того, почему решение класса неопрятно, см. Эту скрипту: http://jsfiddle.net/Y9L4x/ (вдохновленный @BiffMaGriff, предлагаемый solutin здесь: http://jsfiddle.net/rte3G/)
Проблема состоит в том, что элементы, которые мелькают, уже могут быть привязаны к рукоятке с несколькими классами.
Я признаю, что сначала могу удалить классы стилей, прежде чем применять "flash" классы, усложнить JavaScript и/или правила CSS и т.д. И т.д.
Но все дело в поиске неклассового решения заключается в том, что этот вариант становится чрезвычайно многословным в реальной ситуации, и вы, как правило, должны программировать каждый проблесковый объект по отдельности, а не опрятный одно-JavaScript-function-fits- все, что я ищу.
Прямой ответ на вопрос представляется простым "Нет".
Вы не можете сказать JavaScript для стиля объекта, а затем на более позднем этапе попросите JavaScript вернуть стиль ответственности CSS.
Тем не менее, еще одна беспорядочная работа - это перерисовать HTML внутри элемента, который содержит ваш проблесковый объект.
$jq_flashing_obj.parent().html(original_html_);
У этого есть небольшая накладная необходимость обернуть ваш проблесковый объект внутри элемента div
или span
, чтобы гарантировать, что родительский элемент содержит ничего, кроме вашего мигающего элемента.
<div class="multiple-children">
<a href="#">link 1</a>
<span class="wrapper"><a href="#">Click me to watch me flash</a></span>
<a href="#">link 3</a>
</div>
Вы, конечно, должны захватить внешнийHTML своего мигающего объекта до начала мигания.
original_html_ = $jq_obj[0].outerHTML;
Полученный JavaScript немного немного подробный, как вы видите здесь: http://jsfiddle.net/CgsLs/. Однако он имеет следующие преимущества:
:hover
и другое грязное моделированиеЕсть также сторонники
on()
(в отличие от простого обработчика события click
)Anyhoo... это не может быть решением для всех. В некоторых случаях (возможно, даже в большинстве случаев) опция класса может быть проще.
Но это еще один возможный метод решения этого неотъемлемого недостатка в технологии JavaScript/браузера.
Вы захотите сделать свои стили как классы.
.activated{
background-color: red; //or whatever else
}
а затем с помощью jquery вы можете просто переключать их несколько раз с задержками, которые, как я полагаю, у вас уже есть в вашем javascript.
$jq_obj.toggleClass('activated');
setTimeout
я сейчас реализую, беспорядочная, учитывая, что она асинхронная. Что нам действительно нужно, так это синхронная функция delay()
.
Попробуй это:
$jq_obj.attr('style','');