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

Выше 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
    Михаил 
    44 года
    8 лет в сервисе
    Был
    4 года назад

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

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

    • Здравствуйте! Ищу разработчика Битрикс для постоянного сотрудничества - мелкие доделки, крупные разработки, полная интеграция на CMS.Сейчас есть одна тестовая задача, ищу исполнителя.Задача:В корзине сайта необходимо сделать динамический функционал, который будет выводить "Купите еще на N ...

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

      В выдаче яндекса есть слайдер пример http://joxi.ru/LmG4lLQHl68QL2 Нужно помочь сделать такой же. Нужен человек, который уже делал такое. Понятно, что это турбо страницы и т.д. Но надо чтобы у Вас уже был готовый ...

      Закрыт
      4 года назад
    • Ищем специалиста по данной системе. Фронт, написание, доработка плагинов. Оплата почасовая, по трекеру. До $30 в час.

      Закрыт
      4 года назад
    • Нужен парсинг сайта, Live матчей футбола на странице https://www.sofascore.com/football/livescore ТЗ по ссылке: https://docs.google.com/document/d/1aPjvn-h3y6TO_TRhpY-Ewq8fGlYlm39oA5OOg0NDArk/edit?usp=sharing Срочность высокая, оплата достойная. Предпочтительно на PHP.

      Закрыт
      4 года назад
    • Проект на laravel 7.2 ( агрегатор перевозок ) От вас требуется: Отвественный подход, быть на связи, иметь возможность выделять от 5 часов в день на проект. Оплата: делим задачи на этапы ...

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

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