2012-06-14 3 views
1

Я надеюсь, что кто-то может мне помочь. У меня следующая проблема:jQuery fadein мерцает

http://jsfiddle.net/zhPAF/

наценка:

<nav> 
       <ul id="topNav"> 
        <li id="topNavFirst"><a href="pages/about/about.php" id="aboutNav">About Us</a></li> 
        <li id="topNavSecond"><a href="pages/people/our-people.php" id="peopleNav">Our People</a> 
         <ul id="subList1"> 
          <li><a href="pages/people/mike-hadfield.php">Mike Hadfield</a></li> 
          <li><a href="pages/people/karen-sampson.php">Karen Sampson</a></li> 
          <li><a href="pages/people/milhana-farook.php">Milhana Farook</a></li> 
          <li><a href="pages/people/kim-crook.php">Kim Crook</a></li> 
          <li><a href="pages/people/amanda-lynch.php">Amanda Lynch</a></li> 
          <li><a href="pages/people/gideon-scott.php">Gideon Scott</a></li> 
          <li><a href="pages/people/paul-fuller.php">Paul Fuller</a></li> 
          <li><a href="pages/people/peter-chaplain.php">Peter Chaplain</a></li> 
          <li><a href="pages/people/laura-hutley.php">Laura Hutley</a></li> 
         </ul> 
        </li> 
        <li id="serviceNavDropdown"><a href="our-services.php" id="servicesNav">Our Services</a> 
         <ul id="subList2"> 
          <li><a href="pages/services/company-and-commercial.php">Company &amp; Commercial</a></li> 
          <li><a href="pages/services/employment.php">Employment</a></li> 
          <li><a href="pages/services/civil-litigation.php">Civil Litigation</a></li> 
          <li><a href="pages/services/debt-recovery.php">Debt Recovery</a></li> 
          <li><a href="pages/services/conveyancing.php">Conveyancing</a></li> 
          <li><a href="pages/services/commercial-property.php">Commerical Property</a></li> 
          <li><a href="pages/services/wills-and-probate.php">Wills &amp; Probate</a></li> 
          <li><a href="pages/services/family.php">Matrimonial &amp; Family</a></li> 
         </ul> 
        </li> 
        <li><a href="pages/news/news.php" id="newsNav">News</a></li> 
        <li><a href="pages/careers/careers.php" id="careersNav">Careers</a></li> 
        <li><a href="pages/contact/contact.php" id="contactNav">Contact</a></li> 
       </ul><!-- /topNav --> 
      </nav>​ 

CSS

#topNav { 
float:right; 
height:30px; 
margin:0; 
font-size:12px; 
} 

#topNav li { 
display:inline; 
list-style:none; 
color:#666; 
border-left: 1px solid #666; 
padding: 0 0 0 3px; 
} 

#topNav li a:hover { 
} 

#topNavFirst { 
border-left: 1px solid transparent !important; 
} 

#topNav ul{ 
background:#fff url(images/people-ul-bg.png) no-repeat; 
border:1px solid #666; 
border-top:0px solid transparent; 
border-bottom:2px solid #666; 
list-style:none; 
position:absolute; 
left:-9999px; 
width:90px; 
text-align:left; 
padding:5px 0 5px 0px; 
z-index:10; 
} 

#topNav ul li{ 
display:block; 
border-left:0px; 
margin-bottom: 0px; 
padding:0; 
} 

#topNav ul a{ 
padding:0 0 0 5px;  
} 

#topNav li:hover ul{ 
left:auto; 
margin-left:55px; 
margin-top:-1px;    
} 

#topNav li:hover a { 
color:#369; 
} 

#topNav li:hover ul a{ 
text-decoration:none; 
color:#666; 
} 

#topNav li:hover ul li a:hover{ 
color:#fff;; 
width:100%; 
} 

#topNav ul li:hover { 
background:#369; 
display: block; 
} 

#topNav ul li a { 
display: block; 
padding:0 0 0 4px; 
} 

#serviceNavDropdown ul{ 
background:#fff url(images/service-ul-bg.png) no-repeat; 
width:135px !important; 
margin-left:117px !important; 
margin-top:-1px;   
} 

JQuery

jQuery(document).ready(function() { 

     $('#subList1').css("display", "none"); 
     $('#topNavSecond').hover(function() { 
      $('#subList1').fadeIn('slow'); 
     }, 
     function(){ 
      $('#subList1').fadeOut('slow'); 
     }); 
     $('#subList2').css("display", "none"); 
     $('#serviceNavDropdown').hover(function() { 
      $('#subList2').fadeIn('slow'); 
     }, 
     function(){ 
      $('#subList2').fadeOut('slow'); 
     }); 
    });​ 

Когда #topNavSecond ("Наша People ') якорь, ul # subList1 должен исчезать. Теперь, как вы можете видеть из скрипки, он не исчезает при первом зависании, а только при последующих зависаниях. Аналогичным образом следующий якорь («Наши услуги») делает то же самое, и при переходе между ними возникают некоторые проблемы с выцветанием.

Я дошел до пределов своих знаний о jquery (что, по общему признанию, мало!) И дорого оценил бы какую-то помощь.

Редактировать> Код, указанный выше, скорректированный код и работает. Но следующий JQuery лучше, добавив некоторые .stop (правда, правда):

jQuery(document).ready(function() { 

     $('#subList1').css("display", "none"); 
     $('#topNavSecond').hover(function() { 
      $('#subList1').stop(true, true).fadeIn('slow'); 
     }, 
     function(){ 
      $('#subList1').stop(true, true).fadeOut('slow'); 
     }); 
     $('#subList2').css("display", "none"); 
     $('#serviceNavDropdown').hover(function() { 
      $('#subList2').stop(true, true).fadeIn('slow'); 
     }, 
     function(){ 
      $('#subList2').stop(true, true).fadeOut('slow'); 
     }); 
    }); 
+0

jsFiddle - отличный инструмент на этом сайте, но вам также нужно сделать свой вопрос более «самодостаточным».В противном случае, когда сайт jsFiddle опускается, вопрос бесполезен. – Sparky

+0

Действительно извините Спарки, я включу код в op. – Berns

+0

Хорошо, спасибо. – Sparky

ответ

2

У вас есть это набор $('#topNavSecond').parent().hover(function() # родитель topNavSecond был бы весь UL. Я считаю, что вы имеете в виду $('#topNavSecond').hover(function()

Смотрите здесь: http://jsfiddle.net/zhPAF/1/

+0

Gah, избили меня. http://jsfiddle.net/zhPAF/2/. +1 –

+0

Вау! Это был быстрый ответ, и он отлично работает, огромное спасибо! – Berns

+0

Рад, что я мог бы помочь! – MoDFoX

1

Я не вижу мерцание, но может быть, я не понимание. Однако вы должны добавить .stop() s до того, как анимация произойдет, если она не будет завершена.

 $('#subList1').css("display", "none"); 
     $('#topNavSecond').parent().hover(function() { 
      $('#subList1').stop(true, true).fadeIn('slow'); 
     }, 
     function(){ 
      $('#subList1').stop(true, true).fadeOut('slow'); 
     }); 
     $('#subList2').css("display", "none"); 
     $('#serviceNavDropdown').parent().hover(function() { 
      $('#subList2').stop(true, true).fadeIn('slow'); 
     }, 
     function(){ 
      $('#subList2').stop(true, true).fadeOut('slow'); 
     }); 

http://jsfiddle.net/imoda/zhPAF/3/

+0

Хорошие мысли здесь. См. Также ответ @MoDFox. 'parent()' используется там, где он не должен. Возможно, объедините ответы. –

0

Во-первых, я хотел бы сделать некоторые дополнения к вашему CSS: Добавить это так:

#topNav li { 
    position:relative; 
} 

Добавить это правило:

#topNav li ul { 
    position:absolute; 
    display:none; 
} 

Теперь вместо вызова прямо, захватите их с помощью jQuery по типу и иерархии тегов:

$('#topNav li').hover(function() { 
      $(this).children('ul').stop(true, true).animate({'opacity' : 'show'}, 'slow'); 
     }, 
     function(){ 
      $(this).children('ul').stop(true, true).animate({'opacity' : 'hide'}, 'slow'); 
     }); 

Это будет работать на любом ul, содержащемся внутри li внутри всего, что было бы как topnav. Используйте CSS, чтобы диктовать позиционирование. Я пошел с анимацией, потому что он функционирует одинаково и предлагает вам еще один контроль ... вы можете легко добавить «height»: «show» и «height»: «скрыть», чтобы получить приятную анимацию.

Я бы посоветовал не устанавливать конкретные ширины в ul внутри li. Добавить пробел: nowrap; к ли, а затем сделать все это на уровне тега с помощью некоторого дополнения, уль и ли будут формироваться для них.

Кроме того, я бы избегал использовать: наведите курсор на что-либо, кроме a, так как IE не играет хорошо с ним в противном случае.