2013-02-21 125 views
0

在我的頁面上,當用戶說1000個像素向下滾動頁面時,我的導航淡出,當我向後滾動導航淡入時,我使用以下完美的作品。 ..淡入淡出jQuery的問題

// Fade Navigation 

if(!$('nav ul').is(':visible')) { 
    $('nav ul').stop().fadeIn(500); 
} else { 
    $('nav ul').stop().fadeOut(500); 
} 

我唯一的問題是,如果你真的快速滾動,動畫完全不認識如果它的可見或不可見,有沒有辦法阻止呢?

+0

什麼瀏覽器?你可以讓[jsfiddle](http://jsfiddle.net/)向我們展示嗎? – Automatico 2013-02-21 16:49:39

+0

我不認爲':visible'就是這樣工作的---即使元素是從視圖中滾動出來的,如果它們仍佔用文檔中的空間,它們就被認爲是':visible'。另外,您可能很高興知道有一個'.fadeToggle()'函數! – 2013-02-21 16:50:12

+0

jQuery完全知道你的元素是否可見。事情是,'.stop()''fadeOut'動畫使元素部分可見,這被視爲':visible'。 – 2013-02-21 16:52:15

回答

1

如果您在true傳遞的第二個參數.stop(),它會停止動畫元素跳轉至狀態時,它應該是如果動畫實際完成。

即如果調用$('nav ul').stop(true, true).fadeIn(500)而一個元素淡出,將停止淡出,使其之前跳轉到它的邏輯結束(這是完全淡出)開始.fadeIn()動畫。

利用這一點,你應該能夠代替按照您的代碼塊的上方脫身:

$('nav ul').stop(true, true).fadeToggle(500); 

它會看起來有點生澀,雖然,但你可以解決它多一點複雜的邏輯。

0

我一直在玩這個。請參閱代碼中的評論。

<nav class="main"> 
    <ul> 
     <li>One</li> 
     <li>Two</li> 
    </ul> 
</nav> 

<script type="text/javascript"> 

    // Do this outside of the onscroll handler. onscroll is fired a lot, 
    // so performance will slow if you're having to create jq instances 
    // or navigate the dom several times 
    var $wnd = $(window); 
    var $nav = $('nav.main'); 

    // Added this to block the main handler from executing 
    // while we are fading in or out...in attempt 
    // to smooth the animation 
    var blockHandler = false; 

    window.onscroll = function() { 
     if (!blockHandler) { 
      blockHandler = true; 

      // I've used 50 here, but calc the offset of your nav 
      // and add the height to it. Or, maybe just half the 
      // height to it so you can see the animation. 
      if ($wnd.scrollTop() < 50) { 
       $nav.fadeIn(500, function() { 
        blockHandler = false; 
       }); 
      } else { 
       $nav.fadeOut(500, function() { 
        blockHandler = false; 
       }); 
      } 
     } 
    }; 

</script> 
+0

對不起,我不認爲冒犯你,但我認爲利亞姆很難讓他的菜單順利淡入淡出,所以爲什麼我發佈了一些「我一直在玩的東西」,這可能會給他有關如何實現他想要的新想法。 – 2013-02-21 17:48:49

+0

Sparky - 滾動代碼窗口。 – 2013-02-21 17:55:24

+0

一般而言,答案會附帶說明,尤其是在很多情況下,答案似乎無關緊要。這是jQuery,不需要測試瀏覽器......這就是使用它的要點。 – Sparky 2013-02-21 17:59:17