Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.09.2017, 10:30
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Правильное адаптивное меню
Здравствуйте подскажите пожалуйста. Мне уже ранее помогли на этом форуме с адаптивным меню, но оно не совсем правильно работает, вот код меню:
$('.menu__list').on('mouseleave mouseenter click', function (e) {
    if( e.relatedTarget === null && e.type !== 'click' ) return;
    $('.middleMenu__drop').slideToggle(100);
});

<ul class="wrap middleMenu">
<li class="menu__list first"><a>Каталог</a>
	<ul class="middleMenu__drop" style="display: block;">
		<li><a href="#">Туфли</a></li>
		<li><a href="#">Босоножки</a></li>
		<li><a href="#">Кеды</a></li>
		<li><a href="#">Кросcовки</a></li>
		<li><a href="#">Ботинки демисезон</a></li>
		<li><a href="#">Сапоги демисезон</a></li>
	</ul>
</li>
<li><a href="#">ОПЛАТА / ДОСТАВКА</a></li>
<li><a href="#">ОТЗЫВЫ О МАГАЗИНЕ</a></li>
<li class="last"><a href="#">НОВИНКИ</a></li>
</ul>

Но это меню выходит дерганым, если мышкой наводить и уводить, его можно сломать и заставить работать наоборот, так же как если при обновлении страницы курсор мышки навести на меню и заставить его выпасть.
Хотелось бы правильно реализовать меню вероятно это нужно делать через slideDown и slideUp, я нашел вот такой кусок когда:
$(document).ready(function () {
 
  $('.vert-nav li').hover(
    function() {
      $('ul', this).slideDown(110);
    },
    function() {
      $('ul', this).slideUp(110);
    }
  );
 
});

Но тут при неведение только работает, я так понимаю что неправильно вызывать для каждого события одну и туже функцию, хотелось бы передать список событий через .on, то в примере с .hover в качестве параметров передано две функции slideDown и slideUp, в .on не получается просто передать две функции после перечня событий, подскажите как правильно реализовать данный момент?
Ответить с цитированием
  #2 (permalink)  
Старый 05.09.2017, 10:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Tipylja,
другого выхода, как оставить только клик, не вижу.
Ответить с цитированием
  #3 (permalink)  
Старый 05.09.2017, 10:48
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

$('.menu__list').on('mouseenter', function (e) {
    $('.middleMenu__drop').slideDown(100);
});
$('.menu__list').on('mouseleave', function (e) {
    $('.middleMenu__drop').slideUp(100);
});

если разделить событие не сломается, а клик указан для тачей?
Ответить с цитированием
  #4 (permalink)  
Старый 05.09.2017, 10:48
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Сообщение от рони Посмотреть сообщение
Tipylja,
другого выхода, как оставить только клик, не вижу.
Это адаптивное меню, оно должно срабатывать и при наведении и при клике, в том числе и с мобильных устройств=(
Ответить с цитированием
  #5 (permalink)  
Старый 05.09.2017, 10:49
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Сообщение от j0hnik Посмотреть сообщение
если разделить событие не сломается, а клик указан для тачей?
Получается что да, для тачей, для мышки срабатывает hover
Ответить с цитированием
  #6 (permalink)  
Старый 05.09.2017, 11:03
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Tipylja Посмотреть сообщение
Получается что да, для тачей, для мышки срабатывает hover
как я предложил на большинстве мобильных устройств работать будет по принципу, косящемся ссылки открывается, касаемся в пустоту закрывается. есть тачь события но они еще сырые.
Ответить с цитированием
  #7 (permalink)  
Старый 05.09.2017, 11:03
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72



Возможно как-то можно дополнить событием на клик(тап), что если меню раскрыто, то при клике slideUp а если закрыто, то slideDown?
Ответить с цитированием
  #8 (permalink)  
Старый 05.09.2017, 11:05
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Сообщение от j0hnik Посмотреть сообщение
как я предложил на большинстве мобильных устройств работать будет по принципу, косящемся ссылки открывается, касаемся в пустоту закрывается. есть тачь события но они еще сырые.
Да, работает, но закрывается только по клику вне меню, а на мобильных устройствах это меню занимает весь экран по ширине, что бы его закрыть, нужно скролить и искать пустое место что бы при клике закрылось=( То есть нужно условие для клика по идее? Но как отследить, открыто ли меню сейчас, что бы понять стоит его закрыть или открыть
Ответить с цитированием
  #9 (permalink)  
Старый 05.09.2017, 11:20
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

В общем написал вот так и все работает вроде бы как нужно, буду тестировать. Всем спасибо за ответы
$('.menu__list').on('mouseenter', function (e) {
    $('.middleMenu__drop').slideDown(100).addClass('open');
});
$('.menu__list').on('mouseleave', function (e) {
    $('.middleMenu__drop').slideUp(100).removeClass('open');
});
$('.menu__list').on('click', function (e) {

    if($('.middleMenu__drop').hasClass('open')){        
        
        $('.middleMenu__drop').slideUp(100).removeClass('open');
    }else{
        
        $('.middleMenu__drop').slideDown(100).addClass('open');
    }
});
Ответить с цитированием
  #10 (permalink)  
Старый 05.09.2017, 11:33
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

UPD. Поспешил, не правильно работает на тачскрине, при первом нажатие меню раскрывается и тут же скрывается, после этого начинает работать нормально
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена стилей класса Павел Турченко Элементы интерфейса 9 30.10.2015 15:24
Адаптивное меню sergiocharm Общие вопросы Javascript 10 07.04.2015 13:49
Бесконечноуровневое меню на CSS ruslan_mart Ваши сайты и скрипты 5 12.01.2015 20:59
Выделение активных пунктов многоуровневого меню на jQuery Letto Элементы интерфейса 2 04.12.2013 15:30
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 14:36