Прошу помощи специалистов, так как новичок в данном деле.Как сделать чтобы меню в зависимости от разрешения экрана выполняло свои функции?

Выше 768px:

1) Здесь интересует наведение мыши и клик. При наведении мыши или по клику на li.item открывалось его под меню.

2) При клике по li.item идет переход по ссылке, его необходимо отключить, переход по ссылке li должен быть только по подменю ul.subs li.

3) Под меню должно закрываться только при условии, если идет переход мыши или клик на следующее li.item или клик на закрытие окна на cross.

4) Если просто убрать мышь с поля меню, оно закрывается, а должно быть открыто, до тех пор, пока не выполнится условие в пункте 3.

Ниже 768px:

5) Здесь открытие меню должно быть только по клику, а закрытие по клику на крестик cross.

6) При клике по li.item идет переход по ссылке, его необходимо отключить, переход по ссылке li должен быть только по подменю ul.subs li.

PS:

1) По разрешению экрана интересует только метод matchMedia, не resize.

2) Только JavaScript.

3) Сейчас идет конфликт по закрытию меню на cross, потому как функция по click дублируется.

4) Не срабатывает сразу метод matchMedia, только после обновления экрана.

5) Не выполняется пункт 4, так как не знаю куда сувать)) e.preventDefault(), все уже перетыкал))).

6) Пункт 2 и 6 так же не выполняется, идет сразу переход по ссылке.

7) Если данный код еще можно уменьшить, это вообще супер! Так как переменную li приходится дублировать.

var dropdown = document.querySelectorAll('.menu-left>li');

var mediaQuery = window.matchMedia('(min-width: 768px)');

for(var i=0; i

function handleTabletChange(e) {

if (e.matches) {

['mouseover', 'click'].forEach(e => {

dropdown.addEventListener(e, function(e) {

var li = e.target.closest('li.item');

li.classList.add('active');

});

});

dropdown.addEventListener('mouseout', function(e) {

var li = e.target.closest('li.item');

li.classList.remove('active');

});

} else {

dropdown.addEventListener('click', function(e) {

var li = e.target.closest('li.item');

li.classList.add('active');

});

}

}

mediaQuery.addListener(handleTabletChange);

handleTabletChange(mediaQuery);

}

var cross = document.querySelectorAll('.cross');

for(var i=0; i

cross.addEventListener('click', function(e) {

var li = e.target.closest('li.item');

li.classList.remove('active');

});

}

  • Пример

  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
    • Пример
    • Пример
    • Пример
    • Пример
    • Пример
    • Пример
    • Пример
    • Пример
    • Пример
    • Пример

  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • Пример
  • 

    4 года назад
    Locosa7
    Михаил 
    45 лет
    9 лет в сервисе
    Был
    4 года назад

    Заявки фрилансеров

    Варужан
     
    22 года
    5 лет в сервисе
    Был
    6 месяцев назад
    1 отзыв
    4 года назад
    • Похожие заказы

    • Необходимо разработать скрипт для принятия Anti-Captha на указанном веб-сайте. Подробности по задаче будут предоставлены в личной переписке. Ожидается качественное выполнение с учетом всех требований.

      Закрыт
      4 года назад
    • Требуется разработать расширение для входа на сайт, которое обеспечит скрытость логинов и паролей. Основные функции: импорт файла с данными, отображение только ID в выпадающем списке и возможность поиска по ID. Срок выполнения – сегодня-завтра.

      Закрыт
      4 года назад
    • Требуется разработчик для реализации динамического функционала в корзине сайта на 1С-Битрикс. Необходимо выводить сообщения об акциях на основе правил работы с корзиной. Сообщения должны обновляться при изменении стоимости корзины. Возможность работы с несколькими правилами. Укажите сроки и стоимость выполнения задачи.

      Закрыт
      4 года назад
    • $8

      Требуется специалист по веб-программированию для создания слайдера в выдаче Яндекса. Опыт в разработке турбо-страниц обязателен. Необходим готовый пример реализации для быстрой настройки под руководством исполнителя.

      Закрыт
      4 года назад
    • Требуется специалист по Craft CMS для фронт-энд разработки и доработки плагинов. Оплата почасовая, до $30 в час, по трекеру. Ожидаются навыки в веб-программировании и опыт работы с этой системой.

      Закрыт
      4 года назад
    • Требуется разработка скрипта для парсинга Live матчей футбола с сайта SofaScore.com. Необходимо извлекать данные и обрабатывать их для дальнейшего использования. Предпочтительно использование PHP. Срочность высокая, оплата достойная. Подробности в предоставленном техническом задании.

      Закрыт
      4 года назад
    • Требуется разработчик для создания агрегатора перевозок на Laravel 7.2. Основные задачи: внутренний баланс, уведомления, панели управления, подключение системы пополнения/выплаты и настройка комиссии. Ожидается работа от 5 часов в день. Бюджет 500-600Р за час. Ищем частного исполнителя.

      Закрыт
      4 года назад
    • Требуется разработчик для создания высоконагруженных Telegram ботов. Необходимы навыки работы с базами данных и сортировкой данных. Проект предполагает долгосрочное сотрудничество с возможностью обсуждения деталей.

      Закрыт
      4 года назад
    • Задача заключается в интеграции витжета оплаты на сайт с использованием API другого ресурса. Необходимо иметь опыт в веб-программировании и знание работы с API для успешного выполнения задачи.

      Закрыт
      4 года назад