@andreychumak
junior

Как сделать меню с задержкой при hover (js)?

Столкнулся с извечной проблемой задержки при наведении на элемент, при hover. Нужно решить ее js'ом.
На css я сделал, сперва убрав display: none и дальше добавив анимацию. но в итоге пришлось отказаться от этого варианта.

Вот здесь код, и не могу понять почему это не работает.
При mouseenter создаю класс, при mouseleave удаляю, вроде бы все правильно, на сколько я понимаю, но это не работает.

В общем, нужно чтобы убиралось и появлялось меню при наведении (hover) с задержкой. Помогите, если не сложно.
  • Вопрос задан
  • 900 просмотров
Решения вопроса 1
sfi0zy
@sfi0zy Куратор тега CSS
Creative frontend developer
Судя по стилям, вы вообще что-то не то и не туда добавляете. Если хотите решить вопрос с помощью js, для начала уберите все, что сязано с :hover из css. На событие hover будет добавляться отдельный класс "hovered":
.b-content-block__menu ul li.hovered > .b-content-block__menu__submenu { ... }
.b-content-block__menu ul li.hovered > .b-bottom-submenu { ... }


Теперь на упомянутое событие этот класс добавляем:
function(){
    setTimeout(function() {
        $(this).addClass('hovered');
    }, 
    500);
},


Не работает, что логично. Выходов два, первый:
function(){
    var _this = this;
    setTimeout(function() {
        $(_this).addClass('hovered');
    }, 
    500);
},


Второй - использовать стрелочную функцию. Надеюсь гуглом пользоваться умеете. В любом случае нужное поведение будет получено.

А теперь о боли...

Если вы используете БЭМ, не делайте вот так, пожалуйста:
.b-content-block__menu ul li .b-content-block__menu__submenu


А что вот это такое?
.b-content-block__menu ul li:hover > b > a

Или используйте БЭМ по фен-шую или не используйте вообще, смесь всего в одной куче - это ужасно.

И, к слову о поведении меню, - оно должно быть доступным для клавиатуры (должна быть возможность протабать все ссылки в нем. Подумайте на досуге как это сделать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Krasnodar_etc
@Krasnodar_etc
fundraiseup
Так ведь у них у всех этот класс уже создан в html-разметке
Ответ написан
@tyzberd
классы в .addClass() и .removeClass() пишутся без точки
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы