2015-12-19 76 views
10

我是jQuery的新手,我一直在教自己,但我一直在努力弄清楚如何指示上滾動白色導航背景向上移動以顯示面板1上的白色導航文本?導航過渡

bartaile.com是我用作靈感&我對bartaile的導航進行的更改是在用戶滾動瀏覽導航隱藏的第一個面板之後,只有當用戶向上滾動導航時再次顯示,當面板1回落時,白色導航背景向上滑動以隱藏並顯示白色文本。

任何幫助或提示,瞭解如何做到這一點將不勝感激! :-)

var lastScrollTop = 0; 
 
$(window).on('scroll', function() { 
 
    var header = $('.header'); 
 
    var stage0 = $('.stage-0'); 
 
    var scrollTop = $(window).scrollTop(); 
 
    if (scrollTop > lastScrollTop) { 
 
     // down scroll 
 
     if (scrollTop > stage0.offset().top + stage0.height()) { 
 
      header.addClass('hide'); 
 
     } 
 
    } else { 
 
     // up scroll 
 
     if (scrollTop <= stage0.offset().top + stage0.height()) { 
 
      header.removeClass('headerBGchange headerLIchange'); 
 
\t \t \t 
 
     } else { 
 
      header.removeClass('hide').addClass('headerBGchange headerLIchange BGupTranistion'); 
 
     } 
 
    } 
 
    lastScrollTop = scrollTop; 
 
});
.header { 
 
    display: -webkit-box; 
 
    display: -webkit-flex; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-box-align: center; 
 
    -webkit-align-items: center; 
 
    -ms-flex-align: center; 
 
    align-items: center; 
 
    height: 80px; 
 
    -webkit-transition: top .5s ease; 
 
    transition: top .5s ease; 
 
    position: fixed; 
 
    width: 100%; 
 
    top: 0; 
 
    background-color: transparent; 
 
    overflow: hidden; 
 
} 
 

 
.header ul { 
 
    margin: 20px; 
 
    padding: 0; 
 
} 
 

 
.header ul li { 
 
    display: inline-block; 
 
    margin-right: 20px; 
 
    color: white; 
 
} 
 

 
.header ul li:last-child { 
 
    margin-right: 0; 
 
} 
 

 
.hide { 
 
    top: -80px; 
 
} 
 

 
.headerBGchange { 
 
    Background: white; 
 
} 
 

 
.BGupTranistion { 
 
} 
 

 
.header.headerLIchange ul li { 
 
    color: Blue; 
 
} 
 

 
.header.headerLIchange { 
 
\t border-bottom: 1px solid black; 
 
}' 
 

 
\t 
 

 

 
</style> 
 
<!--stage style--><style> 
 

 
.stage { 
 
    color: #fff; 
 
    display: -webkit-box; 
 
    display: -webkit-flex; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-box-pack: center; 
 
    -webkit-justify-content: center; 
 
    -ms-flex-pack: center; 
 
    justify-content: center; 
 
    -webkit-box-align: center; 
 
    -webkit-align-items: center; 
 
    -ms-flex-align: center; 
 
    align-items: center; 
 
    height: 100vh; 
 
    background-color: white; 
 
\t border-bottom: 1px solid black; 
 
    font-size: 48px; 
 
\t height: 200px; 
 
\t width: 100%; 
 
\t 
 
} 
 

 
.stage-0 { 
 
    background: grey; 
 
} 
 

 
.stage-24 { 
 
    background: #433937; 
 
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<div class="header"> 
 
    <ul> 
 
    <li>Home</li> 
 
    <li>About</li> 
 
    <li>Contact</li> 
 
    </ul> 
 
</div> 
 
<div class="stage stage-0">1</div> 
 
<div class="stage stage-2">3</div> 
 
<div class="stage stage-4">5</div> 
 
<div class="stage stage-6">7</div> 
 
<div class="stage stage-8">9</div> 
 
<div class="stage stage-10">11</div> 
 
<div class="stage stage-12">13</div> 
 
<div class="stage stage-14">15</div> 
 
<div class="stage stage-16">17</div> 
 
<div class="stage stage-18">19</div> 
 
<div class="stage stage-20">21</div> 
 
<div class="stage stage-22">23</div>

+0

你可以使用jQuery的'.slideDown'和'.slideUp'方法來代替使用'.addClass'和'.removeClass'。 – Sam

+0

@Sam導航欄除了滑動之外還有其他過渡元素(背景顏色更改和文本顏色更改)... – Dee

+1

什麼是您需要它做什麼樣的指示?給用戶的反饋? – Simplicity

回答

6

您將需要添加另一個容器,實現你要找的效果。你基本上想要的是一個容器在頂部,另一個容器會根據你的滾動行爲淡入淡出。那麼你如何實現這一目標?在頁面頂部創建一個-Element,就像您現在的灰色框一樣。向下滾動時,不要轉換它,而是淡入另一個先前隱藏的容器中,以便在不在頁面頂部時作爲導航。現在,如果您向後滾動,請檢查滾動位置,並且如果兩個容器的兩個位置重疊,請在不在頁面頂部時開始淡出您使用的容器。我不認爲有另一種解決方案。我現在可能會試着寫一個codepen,如果我成功了,我會編輯我的帖子。你也可以嘗試在實際的頭文件和z-index中使用另一個div,儘管這可能會變得非常糟糕。

我已盡力實現您的目標。這裏是CodePen。 我使用了兩個不同的div,一個叫做.dynamic-header和一個正常的頭,我添加了一個函數來檢測jQuery In-Viewport。

$.fn.isOnScreen = function(){ 
    var element = this.get(0); 
    var bounds = element.getBoundingClientRect(); 
    return bounds.top < window.innerHeight && bounds.bottom > 0; 
} 

我希望這可以滿足您的需求。另外,我改變了一些CSS,使用Top-Property進行轉換。您可以將所有這些外包到CSS類中,然後使用它們,但我認爲這是用於演示目的的最簡單的解決方案。這是你想要的嗎?

編輯1:您以bartaile.com作爲示例。我看了一下他們創建並重新創建的效果。你有什麼做的基本上是創建一個結構是這樣的:

<div class="header-bg"></div> 
    <div class="header-content"> 
     <ul> 
     <li>YOUR HEADER</li> 
     </ul> 
    </div> 

我又CodePen這一點。 header-bg的高度爲0.標頭內容的高度爲80px,背景顏色爲透明。現在不要檢查滾動的方向。效果的唯一重要方面是,你離頂部多遠/是視口中的特定元素?我從頂部去了400px。現在,當滿足這個要求時,只需將header-bg淡入。它將介於包裝和內容之間,並將提供背景。與此同時,您也可以更改標題內容的顏色,但我沒有這樣做。這是bartaile.com所做的,所以你可能想要包括它。請享用!

編輯2:我已根據您的評論編輯了CodePen。在行動中看到它here。這樣做如下:標題在那裏。當向下滾動時,它會消失。在向上滾動時,它會調出一個背景,但是當滾動到scrollTop時,背景會淡出。至於我的理解,這就是你想要的。它使用我在上面發佈的結構。

+0

有沒有更簡單的方法來實現這種效果? http://bartaile.com是我用來作爲靈感,並簡單地添加:用戶滾動通過第一個面板後,導航隱藏,除非用戶只能滾動然後再顯示......我會嘗試你的提示,謝謝你的幫助! – Dee

+0

我編輯了我的帖子。 – NikxDa

+0

bartaile.com在做什麼也是一個好主意。我將再次創建一個CodePen並更新你! – NikxDa

3

我檢查出「bartaile.com」,我必須指出他們使用的是第三方lib,稱爲'fullpage'。如果你想達到這種效果,你應該看看這個lib fullpage.js。這是一個簡單易用的插件來創建全屏滾動網站(也稱爲單頁網站或單頁網站)。它允許創建全屏滾動網站,以及在網站的各個部分添加一些橫向滑塊。

這個插件可以處理「全屏滾動」和正常滾動。你可以用這個更容易達到你的效果