Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.04.2021, 15:28
Аспирант
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 97

Раскрыть правую часть меню в соответствии с ID
Приветствую!

Есть меню, в котором есть видимая левая часть и правая часть, которая раскрывается в соответствии с выбранной вкладкой в левой части меню.

Помогите переделать JS, чтобы задача была выполнена.



<div class="all_categorys">
<!-- Левая видимая часть меню начало-->	
	<div class="mc">
		<ul class="menu">
			<li cat_id="1">
				<div class="class">
					<h4><a href="index.html?cate_id=1">Title 1</a></h4>
				</div>
			</li>
			<li cat_id="2">
				<div class="class">
					<h4><a href="index.html?cate_id=2">Title 2</a></h4>
				</div>
			</li>
			<li cat_id="3">
				<div class="class">
					<h4><a href="index.html?cate_id=3">Title 3</a></h4>
				</div>
			</li>
		</ul>
     <!-- скролл начало-->	
             <div class="ps-scrollbar-y-rail" style="top: 0px; right: 3px; height: 573px; display: inherit;"><div class="ps-scrollbar-y" style="top: 0px; height: 518px;"></div></div>
    <!-- скролл конец-->	
	</div>
<!-- Левая видимая часть меню конец-->	

<!-- Правая раскрывающаяся часть меню начало-->		
	<div class="sub-class" cat_menu_id="1" style="display: none; top: -2px;">												
		<div class="sub-class-content">							
			<div>Text</div>														
		</div>
	</div>
	<div class="sub-class" cat_menu_id="2" style="display: none; top: -38px;">												
		<div class="sub-class-content">							
			<div>Text</div>														
		</div>
	</div>
	<div class="sub-class" cat_menu_id="3" style="display: none; top: -74px;">												
		<div class="sub-class-content">							
			<div>Text</div>														
		</div>
	</div>
<!-- Правая раскрывающаяся часть меню конец-->			
	
	
</div>


$(function() {
	$(".all_categorys ul.menu").find("li").each(
		function() {
			$(this).hover(
				function() {
				    var cat_id = $(this).attr("cat_id");
					var menu = $(this).find("div[cat_menu_id='"+cat_id+"']");
					menu.show();
					$(this).addClass("hover");					
					var menu_height = menu.height();
					if (menu_height < 60) menu.height(80);
					menu_height = menu.height();
					var li_top = $(this).position().top;
					$(menu).css("top",-li_top + 40);
				},
				function() {
					$(this).removeClass("hover");
				    var cat_id = $(this).attr("cat_id");
					$(this).find("div[cat_menu_id='"+cat_id+"']").hide();
				}
			);
		}
	);  

});


Заранее спасибо!

Последний раз редактировалось Vaska, 15.04.2021 в 00:07.
Ответить с цитированием
  #2 (permalink)  
Старый 14.04.2021, 16:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,763

Vaska,
строки 7 и 19 убрать (this).find
Ответить с цитированием
  #3 (permalink)  
Старый 14.04.2021, 18:04
Аспирант
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 97

рони,
Спасибо, праваяя часть меню теперь открывается в соответствии с выбранной вкладкой меню слева.
Есть новая проблема: между левой частью меню и открывшейся правой частью меню есть вертикальный скролл. Если указатель мышки навести на раскрывшуюся правую часть меню, то правое меню закрывается. Это из за скролла между левой и правой частью меню. Когда мышка перешагивает через скролл, правая часть меню закрывается.
В первом сообщении я исправил код HTML и добавил скролл в строку 22.
Как решается такая задача?
Ответить с цитированием
  #4 (permalink)  
Старый 14.04.2021, 18:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,763

Vaska,
такие задачи обычно решаются с помощью css, а не скриптов.
в вашем случае можно попробовать так ...
$(function() {
    $(".all_categorys ul.menu").find("li").each(
        function() {
            $(this).hover(
                function() {
                    var cat_id = $(this).attr("cat_id");
                    var menu = $("div[cat_menu_id='" + cat_id + "']");
                    $(".sub-class").not(menu).stop().hide();
                    menu.stop().show();
                    $(this).addClass("hover");
                    var menu_height = menu.height();
                    if (menu_height < 60) menu.height(80);
                    menu_height = menu.height();
                    var li_top = $(this).position().top;
                    $(menu).css("top", -li_top + 40);
                },
                function() {
                    $(this).removeClass("hover");
                    var cat_id = $(this).attr("cat_id");
                    $("div[cat_menu_id='" + cat_id + "']").stop().delay(700).hide(200);
                }
            );
        }
    );
    $(".sub-class").hover(function() {
        $(this).stop(true).show();
    }, function() {
        $(this).stop().hide();
    })
});

и делайте полноценный макет, минимальный, но достаточный со всеми css и т.д. а не куски кода, по которым нужно гадать что и как у вас устроено.
Ответить с цитированием
  #5 (permalink)  
Старый 14.04.2021, 19:16
Аспирант
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 97

рони,
в первый пост добавил стили .css.
После изменений JS меню ведет себя нестабильно.
При наведении мышки на первые несколько вкладок меню слева, по очереди, первые несколько вкладок открывает правое меню правильно, а на 5-6 вкладке перестает открывать правое меню или открывает половину меню. Как-то странно.
Если мышкой переходить по вкладкам и потом возвращаться на предыдущую вкладку, то открывает правую часть хорошо.
При наведении на вертикальный скролл, правая часть меню всё-равно закрывается, а нужно, чтобы не закрывалась.
Ответить с цитированием
  #6 (permalink)  
Старый 14.04.2021, 19:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 30,763

Vaska,
я пас.
Ответить с цитированием
  #7 (permalink)  
Старый 14.04.2021, 19:30
Аспирант
Отправить личное сообщение для Vaska Посмотреть профиль Найти все сообщения от Vaska
 
Регистрация: 08.05.2017
Сообщений: 97

рони,
тогда последний вопрос: можете исправить код JS, чтобы при наведении мышки на вкладку левой части меню, открывалась правая часть меню, но не закрывалась, если мышку убрать из области правой части меню. А закрывать правую часть меню кликнув мышкой за пределами меню.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
mouseover jquery SolomonRei Элементы интерфейса 0 27.11.2018 16:41
Замена стилей класса Павел Турченко Элементы интерфейса 9 30.10.2015 14:24
Бесконечноуровневое меню на CSS ruslan_mart Ваши сайты и скрипты 5 12.01.2015 19:59
Выделение активных пунктов многоуровневого меню на jQuery Letto Элементы интерфейса 2 04.12.2013 13:30
Проблема с аккордионом и меню Tie ExtJS 3 01.09.2011 13:36