Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   выпадающее меню (https://javascript.ru/forum/jquery/20589-vypadayushhee-menyu.html)

devote 11.08.2011 11:26

Вставь этот код где нить в одном месте, например в внутри тега <head>

<script type="text/javascript">
$(document).ready(function () {    
    $('.megamenu li').hover(    
        function () { 
           var maxLeft = $('.header').width() + $('.header')[0].offsetLeft, 
                el = $('.level', this).show(); 
  
           if ( Math.max(0, el[0].offsetLeft - ( maxLeft - el[0].offsetWidth ) ) != 0 ) {   
               el.css("left", (maxLeft - el[0].offsetWidth) + "px");   
           }   
            //показать подменю    
           el.hide().slideDown(0);    
        },    
        function () {    
            //скрыть подменю    
           $('.level', this).slideUp(0);    
        }   
      );    
});
</script>

И не нужно будет клонировать сотню раз его.

Денис2201 11.08.2011 11:28

дело все в том, что это скрипт находится в xsl шаблоне и в цикле, поэтому расклонировался для каждого пункта меню)

Денис2201 11.08.2011 11:30

а еще я привязан к id меню

Денис2201 11.08.2011 11:32

А вы не поможете ограничить вывод скрипта, на те пункты меню, в которых нет выпадающего списка? А то к ним применяется стиль для выпадающего меню, это видно в разделе Студентам

devote 11.08.2011 11:45

да я там еще кой чё пропустил у тя на сайте, в коде не то написал, надо вместо этого:
var maxLeft = $('.header').width() + $('.header')[0].offsetLeft,
написать так:
var maxLeft = $('.header').width(),
Я не обратил внимания на то что header стоит с релативной позицией.

Цитата:

Сообщение от Денис2201
А вы не поможете ограничить вывод скрипта, на те пункты меню, в которых нет выпадающего списка? А то к ним применяется стиль для выпадающего меню, это видно в разделе Студентам

$(document).ready(function () {
    $('.megamenu li').hover(
        function () {
           var maxLeft = $('.header').width(),
                el = $('.level', this);

           if ( el.find('a').length != 0 ) {
               el.show();
               if ( Math.max(0, el[0].offsetLeft - ( maxLeft - el[0].offsetWidth ) ) != 0 ) {
                   el.css("left", (maxLeft - el[0].offsetWidth) + "px");
               }
                //показать подменю
               el.hide().slideDown(0);
           }
        },
        function () {
            //скрыть подменю
           $('.level', this).slideUp(0);
        }
      );
});

Денис2201 11.08.2011 12:05

Работает)))

Денис2201 12.08.2011 10:27

а вы случаем не разбираетесь в xsl шаблонах?

devote 12.08.2011 10:32

Цитата:

Сообщение от Денис2201
а вы случаем не разбираетесь в xsl шаблонах?

я не очень если честно люблю этот способ формирования документов.

Денис2201 12.08.2011 10:43

у меня сайт на движке, который обязывает делать вывод через xsl(((

Денис2201 23.08.2011 16:52

devote, у меня еще пару вопросов по скрипту:
$(document).ready(function () {
	    $('.megamenu li').hover(
	        function () {
	           var maxLeft = $('.header').width(),
	                el = $('.level', this);
	 
	           if ( el.find('a').length != 0 ) {
	               el.show();
	               if ( Math.max(0, el[0].offsetLeft - ( maxLeft - el[0].offsetWidth ) ) != 0 ) {
	                   el.css("left", (maxLeft - el[0].offsetWidth) + "px");
	               }
	                //показать подменю
	               el.hide().slideDown(0);
	           }
	        },
	        function () {
	            //скрыть подменю
	           $('.level', this).slideUp(0);
	        }
	      );
	});


Ко всем элементам меню 3-его и 4-ого уровня меню(div level3 и div level4) применен олин стиль. Но у самого правого, к примеру в О КОЛЛЕДЖЕ это колледж сегодня, а в АБИТУРИЕНТАХ это колледж сегодня, когда выпадает список, то div level3 и div level4 которым в css задано быть рядом, просто отображаются друг под другом.

Дело в скрипте или все же css нужно править?
Хотя в css все нормуль, может у вас есть идеи?


Часовой пояс GMT +3, время: 14:57.