Удалить стили JavaScript, позволяя CSS взять контроль

0

Преамбула: возможный дубликат моего вопроса можно найти здесь, хотя для меня этот вопрос не получил достаточного ответа. Дается обход, но окончательный ответ на вопрос о том, возможно ли это, не предоставляется.

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

Во всяком случае, мне удалось получить эту работу, используя немного 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- все, что я ищу.

  • 5
    как правило, проще переключать класс, пусть правило для класса обрабатывает различные свойства стиля
Теги:

3 ответа

0
Лучший ответ

Прямой ответ на вопрос представляется простым "Нет".

Вы не можете сказать 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/. Однако он имеет следующие преимущества:

  1. Многоразовый на всех элементах clickable CSS :hover и другое грязное моделирование
  2. Может опционально определять цвет вспышки элемента внутри JS
  3. Независимо от CSS, что означает, что код находится в одном файле и, следовательно, более удобен в обслуживании

Есть также сторонники

  1. Требуется использование функции JQuery on() (в отличие от простого обработчика события click)

Anyhoo... это не может быть решением для всех. В некоторых случаях (возможно, даже в большинстве случаев) опция класса может быть проще.

Но это еще один возможный метод решения этого неотъемлемого недостатка в технологии JavaScript/браузера.

2

Вы захотите сделать свои стили как классы.

.activated{
    background-color: red; //or whatever else
}

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

$jq_obj.toggleClass('activated');
  • 0
    Ну да. Это решение, которое я представил в своей преамбуле. Но это именно тот ответ, который я просил вас НЕ предоставлять. То, что я хочу знать, является окончательным Да / Нет в вопросе, может ли это быть сделано по-другому?
  • 0
    Однако, возможно, вы могли бы предложить лучший способ вставить «задержки», о которых вы упомянули. Функциональность setTimeout я сейчас реализую, беспорядочная, учитывая, что она асинхронная. Что нам действительно нужно, так это синхронная функция delay() .
Показать ещё 9 комментариев
0

Попробуй это:

$jq_obj.attr('style','');
  • 0
    Хорошая попытка, покупай, боюсь, нет, это не работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню