Что я делаю не так? Когда меню открыто в мобильной версии (< 768 пикселей), первый щелчок должен открыть подменю, а второй клик должен получить родительский URL-адрес (это работает). После увеличения ширины окна до >= 768 пикселей подменю должно отображаться при наведении курсора на родительский элемент, а родительский тег должен перенаправляться на URL-адрес при первом щелчке (это не работает).
Пожалуйста, помогите мне реорганизовать window.addEventListener('resize', function(){ ... }); Потому что addEventListener и RemoveEventListener не работают должным образом.
Почему событие, запускающее функцию prevFirstClick (сначала мобильные устройства), не удаляется при увеличении экрана до >= 768 пикселей?Почему событие, запускающее функцию prevFirstClick (сначала рабочий стол), не добавляется, когда размер экрана уменьшается до li:hover .submenu{
display: block;
}
}
document.addEventListener('DOMContentLoaded', function() {
// prevent defalt behavior on parent tags - first click open submenu, second click opend href URL
let static_window_width = window.innerWidth;
const menuItems = document.querySelectorAll('.menu-item-has-children');
function prevFirstClick(){
menuItems.forEach(item => {
const preventListener = function(event){
let isOpen = item.getAttribute('aria-expanded');
if(isOpen == 'false'){
item.setAttribute('aria-expanded', 'true');
if(event.preventDefault){
event.preventDefault();
event.stopPropagation();
}else{
event.returnValue = false;
}
}
}
item.addEventListener('click', preventListener );
}); // koniec pętli foreach.
};
// fires event whent mobile firts
if( static_window_width < 768 ){
window.addEventListener('DOMContentLoaded', prevFirstClick );
}
// prevent default behavior on parent tag whent first desktop and user deside to resize to mobile and vice versa remove prevent default from tag when mobile first and then resize to desktop.
window.addEventListener('resize', function(){
const menuItems = document.querySelectorAll('.menu-item-has-children');
let dynamic_window_width = this.innerWidth;
if( dynamic_window_width < 768 ){
window.addEventListener('click', prevFirstClick );
}else{
window.removeEventListener('DOMContentLoaded', prevFirstClick, true );
menuItems.forEach(item => {
let isOpen = item.getAttribute('aria-expanded');
if (isOpen == 'true') {
// first click on parent opens submenu
item.setAttribute('aria-expanded', 'false');
}
});
}
});
});
Подробнее здесь: https://stackoverflow.com/questions/783 ... ize-window
AddEventListener и удалениеEventListener в меню при изменении размера окна ⇐ CSS
Разбираемся в CSS
1712866604
Anonymous
Что я делаю не так? Когда меню открыто в мобильной версии (< 768 пикселей), первый щелчок должен открыть подменю, а второй клик должен получить родительский URL-адрес (это работает). После увеличения ширины окна до >= 768 пикселей подменю должно отображаться при наведении курсора на родительский элемент, а родительский тег должен перенаправляться на URL-адрес при первом щелчке (это не работает).
Пожалуйста, помогите мне реорганизовать window.addEventListener('resize', function(){ ... }); Потому что addEventListener и RemoveEventListener не работают должным образом.
Почему событие, запускающее функцию prevFirstClick (сначала мобильные устройства), не удаляется при увеличении экрана до >= 768 пикселей?Почему событие, запускающее функцию prevFirstClick (сначала рабочий стол), не добавляется, когда размер экрана уменьшается до li:hover .submenu{
display: block;
}
}
document.addEventListener('DOMContentLoaded', function() {
// prevent defalt behavior on parent tags - first click open submenu, second click opend href URL
let static_window_width = window.innerWidth;
const menuItems = document.querySelectorAll('.menu-item-has-children');
function prevFirstClick(){
menuItems.forEach(item => {
const preventListener = function(event){
let isOpen = item.getAttribute('aria-expanded');
if(isOpen == 'false'){
item.setAttribute('aria-expanded', 'true');
if(event.preventDefault){
event.preventDefault();
event.stopPropagation();
}else{
event.returnValue = false;
}
}
}
item.addEventListener('click', preventListener );
}); // koniec pętli foreach.
};
// fires event whent mobile firts
if( static_window_width < 768 ){
window.addEventListener('DOMContentLoaded', prevFirstClick );
}
// prevent default behavior on parent tag whent first desktop and user deside to resize to mobile and vice versa remove prevent default from tag when mobile first and then resize to desktop.
window.addEventListener('resize', function(){
const menuItems = document.querySelectorAll('.menu-item-has-children');
let dynamic_window_width = this.innerWidth;
if( dynamic_window_width < 768 ){
window.addEventListener('click', prevFirstClick );
}else{
window.removeEventListener('DOMContentLoaded', prevFirstClick, true );
menuItems.forEach(item => {
let isOpen = item.getAttribute('aria-expanded');
if (isOpen == 'true') {
// first click on parent opens submenu
item.setAttribute('aria-expanded', 'false');
}
});
}
});
});
Подробнее здесь: [url]https://stackoverflow.com/questions/78312851/addeventlistener-i-removeeventlistener-on-menu-when-resize-window[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия