Open voischev opened 9 years ago
Конкретно данный код можно улучшить в 2 местах:
{
hovered: function(modName, modVal) {
this.__base.apply(this, arguments);
this._button.setMod(modName, modVal);
}
}
А уж насколько правильно само желание эмулировать состояние hovered
— решать тебе.
Как по мне, контрол на видео — это единый блок, у которого необходимая визуальная реакция должна задаваться просто через
.button_type_more:hovered .button__arrow {}
@tadatuta на видео не видно, но в дизайне это очень самостоятельных блока. И в одном из состояний more
есть button
Не совсем понял
button
инициализировать внутри? Как это будет связано с моей задачей? hovered
в любое значение (скобку добавил).это реакция на изменение модификатора hovered в любое значение (скобку добавил).
@tadatuta что-то не работает как ожидается ((( всеравно когда мышка выходит за button
внутри more
с button
убирается модификатор hovered
@voischev я неправильно прочитал твой исходный вопрос :( изменения, которые предложил никак не меняют логику твоего исходного кода, только лишь чуть-чуть экономят на отложенной инициализации и строчках кода.
Умозрительно, происходит следущющее:
more
, твой код выставляет _hovered
на button
.button
, внутри уже благодаря коду button
происходит попытка снова выставить _hovered
, для пользователя все ок.button
, обработчик удаляет _hovered
.Чтобы этого не происходило, ты можешь выставлять для button
внутри more
некий модификатор, в котором отписываться от исходной реакции на ховер (она реализована в https://github.com/bem/bem-components/blob/v2/desktop.blocks/control/control.js#L16-L33)
Записал видео что бы было понятно. https://yadi.sk/i/OWFoBa18cP3j4
Это два самостоятельных блока, но в одном состоянии блока
more
может использоваться блокbutton
над которым хочется производить какие то действия в зависимости от состояния блока родителя. Сейчас есть баг, он заключается в том что, когда нет hover наbutton
то соответственно модификатор этого блока убирается. Но остается hover на блоке родителеmore
который должен транслировать этот hover на внутренний блокbutton
Как сделать правильно, что бы было ожидаемое поведение? Не хочу через стили.
Написал такой код: