Javascript.RU

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

Вот так заработало
$(document).ready(function(){


$('.menu__list').on('mouseenter', function (e) {
    if( e.relatedTarget === null && e.type !== 'click' ) return;
    $('.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');
    }
})

});
Ответить с цитированием
  #12 (permalink)  
Старый 05.09.2017, 11:47
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Новая проблема, к сожалению не хватает знаний, что бы разобраться. Теперь меню работает нормально вроде как, но таких меню на сайте несколько, я написал этот код, со своими классами для каждого меню. И теперь наблюдается такая ситуация, при нажатии ан тачскрине меню раскрывается и скрывается нормально, но если после этого я пытаюсь раскрыть другое меню, то оно так же открывается и тут же скрывается. Подскажите что нудно поправить?
Ответить с цитированием
  #13 (permalink)  
Старый 09.09.2017, 10:14
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Так и не удалось решить задачу=( Возможно все же, кто-нибудь все же укажет куда копать
Ответить с цитированием
  #14 (permalink)  
Старый 09.09.2017, 10:32
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Tipylja,
$(document).ready(function(){
	$('.menu__list').on('mouseenter',function(e){
		if(!e.relatedTarget) 
			return;
		
		$(this).find('.middleMenu__drop').slideDown(100).addClass('open');
	});
	$('.menu__list').on('mouseleave',function(e){
		$(this).find('.middleMenu__drop').slideUp(100).removeClass('open');
	});
	$('.menu__list').on('click',function(e){
		$(this).find('.middleMenu__drop').slideToggle(100).toggleClass('open');
	});
});
Ответить с цитированием
  #15 (permalink)  
Старый 09.09.2017, 11:05
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Сообщение от Nexus Посмотреть сообщение
Tipylja,
$(document).ready(function(){
	$('.menu__list').on('mouseenter',function(e){
		if(!e.relatedTarget) 
			return;
		
		$(this).find('.middleMenu__drop').slideDown(100).addClass('open');
	});
	$('.menu__list').on('mouseleave',function(e){
		$(this).find('.middleMenu__drop').slideUp(100).removeClass('open');
	});
	$('.menu__list').on('click',function(e){
		$(this).find('.middleMenu__drop').slideToggle(100).toggleClass('open');
	});
});
Спасибо, работает адекватно, до того момента пока кликать "menu__list", если же раскрыть меню, кликнуть куда-нибудь вне него, меню закроется, а если вновь кликнуть после этого на "menu__list" меню откроется и тут же скроется, как и ранее - на мобильных экранах, на десктопе все работает отлично.
UPD. Более простая ситуация - открываем страницу на таскрине, тапаем куда угодно в пустое место вне меню, после чего тапаем на меню и получаем - меню раскрывается и тут же скрывается

Последний раз редактировалось Tipylja, 09.09.2017 в 11:12.
Ответить с цитированием
  #16 (permalink)  
Старый 10.09.2017, 09:09
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Извиняюсь, возможно кто-то что-нибудь еще подскажет?
Ответить с цитированием
  #17 (permalink)  
Старый 10.09.2017, 11:23
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Tipylja Посмотреть сообщение
Извиняюсь, возможно кто-то что-нибудь еще подскажет?
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
<ul class="wrap middleMenu">
<li class="menu__list first"><a>Каталог</a>
	<ul class="middleMenu__drop" style="display: none;">
		<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>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>

function is_touch_device() {
 return (('ontouchstart' in window)
      || (navigator.MaxTouchPoints > 0)
      || (navigator.msMaxTouchPoints > 0));
}

if (!is_touch_device()) {
$('.menu__list').on('mouseenter', function (e) {
    $('.middleMenu__drop').slideDown(100);
});
$('.menu__list').on('mouseleave', function (e) {
   $('.middleMenu__drop').slideUp(100);
});
}
else {
	$('.menu__list').on('touchstart', function (e) {
    $('.middleMenu__drop').slideToggle(100);
});
}

</script>
</body>
</html>
Ответить с цитированием
  #18 (permalink)  
Старый 10.09.2017, 11:36
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 505

А если так?
<script src="//code.jquery.com/jquery-latest.min.js"></script>
<ul class="wrap middleMenu">
<li class="menu__list first"><a>Каталог</a>
	<ul class="middleMenu__drop" style="display: none;">
		<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>

<script>
$('.menu__list').on('mouseleave mouseenter click', function (e) {

console.log(e);

    if( e.relatedTarget === null && e.type !== 'click' ) return;
    switch( e.handleObj.origType ) {
        case 'mouseleave': $(this).find('.middleMenu__drop').slideUp(100); break;
        case 'mouseenter': $(this).find('.middleMenu__drop').slideDown(100); break;
        case 'click': $('.middleMenu__drop').slideToggle(100); break;
    }
});
</script>


P.S. вариант j0hnik работает лучше.

Последний раз редактировалось Белый шум, 10.09.2017 в 11:45.
Ответить с цитированием
  #19 (permalink)  
Старый 11.09.2017, 10:36
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Спасибо всем за помощь, вариант от j0hnik вроде бы работает хорошо!
Ответить с цитированием
  #20 (permalink)  
Старый 11.09.2017, 10:55
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

UPD. На тачскринах, при тапе меню разворачивается, но при тапе по пункту меню я попадаю сквозь него, и нажимаются ссылки которые остались под раскрытым меню:
<li><a href="#">ОПЛАТА / ДОСТАВКА</a></li>
<li><a href="#">ОТЗЫВЫ О МАГАЗИНЕ</a></li>
<li class="last"><a href="#">НОВИНКИ</a></li>

То есть опять меню прозрачно, как я описывал в самом начале этой темы, при тапе по нему, я попадаю тапом под выпадающее меню
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена стилей класса Павел Турченко Элементы интерфейса 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