- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как снизить ДРР до 4,38% и повысить продажи с помощью VK Рекламы
Для интернет-магазина инженерных систем
Мария Лосева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть примерно такое меню на сайте
Какое-то время назад сделан скрип, чтобы при табуляции по ссылке, где где есть подменю, добавлялся класс, чтобы меню оставалось открытым при дальнейшей табуляции. Когда последняя ссылка в подменю теряет фокус, то это класс удаляется.
$(document).ready(function () { $('.menu-drop__sp > a').focus( function () { $(this).parents('.menu-drop__sp').addClass('focus-menu'); } ); $('.menu-drop__sp ul li:last-child a').focusout( function () { $(this).parents('.menu-drop__sp').removeClass('focus-menu'); } ) $('.menu-drop__sp > a').hover( function () { $('.menu-drop__sp').removeClass('focus-menu'); } ); $(document).click( function (e) { if (!$('.menu-drop__sp ul a').is(e.target)) { $('.menu-drop__sp').removeClass('focus-menu'); }; } ); });Данный код работает нормально только в том случае, если пользователь переходит только при помощи tab. Если же например на последней ссылке в подменю пользователь захочет перейти на предыдущую ссылку при помощью shift+tab, то подменю закроется, так как последняя ссылка теряет фокус.
То же самое и с ссылкой, где есть подменю. При нажатии shift+tab меню остаётся открытым, что неправильно.
Не могу сообразить как сделать, чтобы когда последняя ссылка теряет фокус, при этом фокус приобретает предыдущая ссылка, то класс не удалялся бы. Тоже самое и с ссылкой, где есть подменю. Если она теряет фокус, а следующая ссылка не приобретает фокус, то класс удалялся бы.
Может как-то можно отслеживать нажатие клавиш shift+tab.
Буду очень признателен, если кто-нибудь подскажет, как это реализовать.
Может как-то можно отслеживать нажатие клавиш shift+tab.
Гугл предлагает варианты:
Получилось реализовать переход с последней ссылки при помощи shift+tab, чтобы подменю не закрывалось, таким образом.
$(document).ready(function () {$('.menu-drop__sp > a').focus(
function () {
$(this).parents('.menu-drop__sp').addClass('focus-menu');
}
);
/////////
document.addEventListener('keydown', function (e) {
let isTabPressed = (e.key == 'Tab' || e.keyCode == 9);
if (e.shiftKey && isTabPressed) {
$('.menu-drop__sp ul li:last-child a').blur(
function () {
$(this).parents('.menu-drop__sp').addClass('focus-menu');
}
);
} else {
$('.menu-drop__sp ul li:last-child a').blur(
function () {
$(this).parents('.menu-drop__sp').removeClass('focus-menu');
}
);
}
});
//////////
$('.menu-drop__sp > a').hover(
function () {
$('.menu-drop__sp').removeClass('focus-menu');
}
);
$(document).click(
function (e) {
if (!$('.menu-drop__sp ul a').is(e.target)) {
$('.menu-drop__sp').removeClass('focus-menu');
};
}
);
});
Не могу понять, почему не работает такой вариант. Мне ведь по сути не надо добавлять класс, только удалить, если на последней ссылке в подменю нажимается только tab без shift
$(document).ready(function () {$('.menu-drop__sp > a').focus(
function () {
$(this).parents('.menu-drop__sp').addClass('focus-menu');
}
);
/////////
document.addEventListener('keydown', function (e) {
let isTabPressed = (e.key == 'Tab' || e.keyCode == 9);
if (!e.shiftKey && isTabPressed) {
$('.menu-drop__sp ul li:last-child a').blur(
function () {
$(this).parents('.menu-drop__sp').removeClass('focus-menu');
}
);
}
});
//////////
$('.menu-drop__sp > a').hover(
function () {
$('.menu-drop__sp').removeClass('focus-menu');
}
);
$(document).click(
function (e) {
if (!$('.menu-drop__sp ul a').is(e.target)) {
$('.menu-drop__sp').removeClass('focus-menu');
};
}
);
});