Сведения о вопросе

DED

18:22, 12th August, 2020

Теги

JavaScript   jQuery    

Контроль состояния прозрачности JavaScript

Просмотров: 247   Ответов: 4

Доброе утро, хабр!
Задача, что стоит передо мной проста и стара как мир — анимационная смена одной картинки другой при наведении мышки. Картинки имеют одинаковые размеры, одна — просто кнопка, другая — кнопка со «свечением»(hover state), кнопки абсолютно позиционированны и находятся «друг в друге». В примитиве задача решается такими строками кода на jQuery:
$('div#left ul li').css({opacity: 0.0});
$('div#left ul li:first').css({opacity: 1.0});
$("div#left li").mouseover(function () {
$('div#left ul li:first').animate({opacity: 0.0}, 1000);
$('div#left ul li:last').animate({opacity: 1.0}, 1000);
});
$("div#left li").mouseout(function () {
$('div#left ul li:first').animate({opacity: 1.0}, 1000);
$('div#left ul li:last').animate({opacity: 0.0}, 1000);
});

Но у данного подхода есть 1 большая проблема — события вызываются и ставятся в очередь вне зависимости от текущего состояния элемента, то есть несколько наведений мышки на элемент вызывают «перемигивание» элемента. Вопрос состоит в том, как отследить текущее состояние элемента и тем самым не включать его обработку, если в данный момент прозрачность картинки изменяется?



  Сведения об ответе

P_S_S

14:48, 13th August, 2020

  Сведения об ответе

$DOLLAR

08:20, 26th August, 2020

Эм… самый тупой вариант: перед началом анимации забивать некую переменную в true, а по окончанию в false. Уже на основе самого тупого варианта контролировать, какая именно сейчас анимация (подсветка контрола или нет), и при необходимости (если в процессе анимации подсветки мышка ушла за рамки контрола) стартовать обратную анимацию.


  Сведения об ответе

lool

08:39, 28th August, 2020

Немного не по теме, но я бы второму элементу опасити не менял. Просто скрытому больший z-index ставим, и его «появляем». Соответственно он закроет собой нижний. А так в промежуточном состоянии, когда у обоих по 50%, будет проглядывать фон на 25%.


  Сведения об ответе

appple

19:19, 9th August, 2020

Предлагаю так: дабавляем li класс .animated. Перед анимацией класс удаляем, после анимации возвращаем. А для mouseover меняем селектор с «div#left li» на «div#left li.animated»


Ответить на вопрос

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