2012-05-24 1 views
0

Как я могу сделать следующее: состояние зависания на верхнем уровне, когда мы здесь в подменю в этом меню? Это, наверное, просто, но я не могу заставить его работать. Я пробовал делать mouseEnter, но я, скорее всего, делаю это неправильно, так как я очень мало знаю о jQuery. Заранее спасибо!Сделать состояние зависания остается при наведении указателя мыши на элементы подменю

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>New Menu</title> 


<link rel="stylesheet" type="text/css" href="droplinetabs.css" /> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 

<script src="droplinemenu.js" type="text/javascript"></script> 

<script type="text/javascript"> 

//build menu with DIV ID="myslidemenu" on page: 
droplinemenu.buildmenu("droplinetabs1") 


</script> 




</head> 

<body> 

<div id="droplinetabs1" class="droplinetabs"> 
<ul id="base"> 
<li><a href="#">Stuff to Do</a> 
    <ul> 
    <li class="base"><a href="#">Activities 1.1</a>  
    <ul> 
      <li><a href="#">Cricket</a></li> 
      <li><a href="#">Rugby</a></li> 
      <li><a href="#">Soccer</a></li> 
     <li><a href="#"> Football</a></li> 
     </ul> 
    </li> 
    <li><a href="#">Activities 1.2</a>  
     <ul> 
      <li><a href="#">Eating</a></li> 
      <li><a href="#">Cooking</a></li> 
      <li><a href="#">Baking</a></li> 
     </ul> 
    </li> 
    <li><a href="#">Activities 1.3</a> 
     <ul> 
     <li><a href="#">Music</a></li> 
     <li><a href="#">Chess</a></li> 
     <li><a href="#">Reading</a></li> 
     <li><a href="#">Scribbling</a></li> 
     </ul> 
    </li> 
    </ul> 
</li> 
<li class="base"><a href="#">More Stuff to Do</a> 
    <ul> 
    <li><a href="#">Activities 2.1</a>  
    <ul> 
     <li><a href="#">Cricket</a></li> 
     <li><a href="#">Rugby</a></li> 
     <li><a href="#">Soccer</a></li> 
     <li><a href="#"> Football</a></li> 
     </ul> 
    </li> 
    <li><a href="#">Activities 2.2</a>  
    <ul> 
      <li><a href="#">Eating</a></li> 
      <li><a href="#">Cooking</a></li> 
      <li><a href="#">Baking</a></li> 
    </ul> 
    </li> 
    <li><a href="#">Activities 2.3</a> 
     <ul> 
     <li><a href="#">Music</a></li> 
     <li><a href="#">Chess</a></li> 
     <li><a href="#">Reading</a></li> 
     <li><a href="#">Scribbling</a></li> 
     </ul> 
    </li> 
    </ul> 
</li> 
<li class="base"><a href="#">Even More</a> 
    <ul> 
    <li><a href="#">Activities 3.1</a>  
    <ul> 
     <li><a href="#">Cricket</a></li> 
     <li><a href="#">Rugby</a></li> 
     <li><a href="#">Soccer</a></li> 
     <li><a href="#">Football</a></li> 
    </ul> 
    </li> 
    <li><a href="#">Activities 3.2</a>  
    <ul> 
     <li><a href="#">Eating</a></li> 
     <li><a href="#">Cooking</a></li> 
     <li><a href="#">Baking</a></li> 
    </ul> 
    </li> 
    <li><a href="#">Activities 3.3</a> 
    <ul> 
     <li><a href="#">Music</a></li> 
     <li><a href="#">Chess</a></li> 
     <li><a href="#">Reading</a></li> 
     <li><a href="#">Scribbling</a></li> 
     </ul> 
    </li> 
</ul> 
</li> 
</ul> 
</div> 






</body> 
</html> 

и

var droplinemenu={ 



arrowimage: {classname: 'downarrowclass', src: 'down.gif', leftpadding: 5}, //customize down arrow image 
animateduration: {over: 1, out: 1}, //duration of slide in/ out animation, in milliseconds 



buildmenu:function(menuid){ 
    jQuery(document).ready(function($){ 
     var $mainmenu=$("#"+menuid+">ul") 
     var $headers=$mainmenu.find("ul").parent() 
     $headers.each(function(i){ 
      var $curobj=$(this) 
      var $subul=$(this).find('ul:eq(0)') 
      this._dimensions={h:$curobj.find('a:eq(0)').outerHeight()} 
      this.istopheader=$curobj.parents("ul").length==1? true : false 
      if (!this.istopheader) 
       $subul.css({left:0, top:this._dimensions.h}) 
      var $innerheader=$curobj.children('a').eq(0) 
      $innerheader=($innerheader.children().eq(0).is('span'))? $innerheader.children().eq(0) : $innerheader //if header contains inner SPAN, use that 

      $curobj.hover(
       function(e){ 
        var $targetul=$(this).children("ul:eq(0)") 
        if ($targetul.queue().length<=1) //if 1 or less queued animations 
         if (this.istopheader) 
          $targetul.css({left: $mainmenu.position().left, top: $mainmenu.position().top+this._dimensions.h}) 
         if (document.all && !window.XMLHttpRequest) //detect IE6 or less, fix issue with overflow 
          $mainmenu.find('ul').css({overflow: (this.istopheader)? 'hidden' : 'visible'}) 
         $targetul.dequeue().slideDown(droplinemenu.animateduration.over) 
       }, 
       function(e){ 
        var $targetul=$(this).children("ul:eq(0)") 
        $targetul.dequeue().slideUp(droplinemenu.animateduration.out) 
       } 
      ) //end hover 
     }) //end $headers.each() 
     $mainmenu.find("ul").css({display:'none', visibility:'visible', width:$mainmenu.width()}) 
    }) //end document.ready 
} 
} 
+0

Это работает для меня. ** EDIT: ** Не работает в IE9/8/7. Работал во всем остальном. – Knyri

+0

ОК. Он работает во всем для меня. Пропустил крошечное всплывающее окно с вопросом, хочу ли я разрешить запуск сценариев на странице в IE. – Knyri

+0

@Knyri Извините, я пропустил пару слов при вводе текста, мне нужно, чтобы состояние зависания оставалось активным на верхнем уровне, в то время как моя мышь находится над пунктами меню подуровня. Мой плохой – user1141719

ответ

0

Добавить $(this).addClass('hover');, чтобы ввести функцию ввода и $(this).removeClass('hover');, чтобы добавить функцию 0 li.hover{/* css specific to it */} в ваш CSS.

 $curobj.hover(
      function(e){ 
       var $targetul=$(this).children("ul:eq(0)") 
            $(this).addClass('hover'); 
       if ($targetul.queue().length<=1) //if 1 or less queued animations 
        if (this.istopheader) 
         $targetul.css({left: $mainmenu.position().left, top: $mainmenu.position().top+this._dimensions.h}) 
        if (document.all && !window.XMLHttpRequest) //detect IE6 or less, fix issue with overflow 
         $mainmenu.find('ul').css({overflow: (this.istopheader)? 'hidden' : 'visible'}) 
        $targetul.dequeue().slideDown(droplinemenu.animateduration.over) 
      }, 
      function(e){ 
       var $targetul=$(this).children("ul:eq(0)") 
            $(this).removeClass('hover'); 
       $targetul.dequeue().slideUp(droplinemenu.animateduration.out) 
      } 
     ) //end hover 

Или, если вы хотите использовать чистую CSS. Вот тот, который я использую на каждом веб-сайте, который я делаю.

nav ul{ 
    margin-bottom:10px; 
    list-style-image:none 
} 
nav>ul>li{ 
    display:inline-block;/* float:left needed for some designs */ 
    font-size:20px; 
    text-align:center; 
    position:relative; 
    z-index:950 
} 
nav a{ 
    text-decoration:none; 
    display:block; 
    color:#000; 
    padding:8px 0 
} 
nav li ul{ 
    display:none; 
    position:absolute; 
    padding:0 8px; 
    margin:0 
} 
nav li:hover ul{display:block} 
nav li li{ 
    font-size:15px; 
    float:none; 
    width:100%; 
    z-index:999 
} 

Обратите внимание, что это скелет и не имеет стиля, чтобы выглядеть красиво.

HTML, довольно прост, а также:

<nav> 
    <ul> 
     <li><a href="#">top level item</a> 
      <ul> 
       <li><a href="#">sub-item</a></li> 
      </ul> 
     </li> 
     <li>top level item</li> 
    </ul> 
</nav> 
+0

Спасибо @Knyri, я думаю, что мне понадобится это немного более конкретным, хотя - что я вставляю и где (я действительно ничего не знаю о jquery/javascript)? Извините за беспокойство, я ценю это. – user1141719

+0

@ user1141719 Отредактировал его, чтобы показать, где должно быть редактирование. – Knyri

+0

Спасибо за помощь @Knyri! Получил это. – user1141719

0

, если вы хотите, чтобы увидеть эту Link для приятного глаза дизайна, способного HTML/CSS (без Javascript требуется) меню надеются, вам понравится.