2015-12-19 10 views
10

私はjQueryのに新しいですし、私が行くように自分自身を教えていますが、白のナビゲーションの背景はパネル1の白のナビゲーションテキストを表示するために上に移動スクロールアップその上指示する方法を見つけ出すのに苦労していますか?ナビゲーション遷移

bartaile.comは私がインスピレーションとして使用しているものです&私はバーテイルのナビゲーションに変更を加えています--->ユーザーがスクロールして最初のパネルをスクロールすると、ナビゲーションが非表示になります。もう一度表示すると、パネル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

'.addClass'と' .removeClass'を使う代わりに、jQuery '.slideDown'と' .slideUp'メソッドを使うことができます。 – Sam

+0

@Samナビゲーションバーには、スライディング(背景色の変更、テキストの色の変更)以外の他のトランジション要素があります。 – Dee

+1

どのような表示が必要ですか、どのような表示ですか?ユーザーへのフィードバック? – Simplicity

答えて

6

あなたが探している効果を達成するために、別の容器を追加する必要があります。あなたが本質的に持っていたいのは、上のコンテナとスクロールの振る舞いに応じてフェード・イン・アウトするコンテナです。では、どうやってそれを達成するのですか?あなたの灰色のボックスのように、ページ上部に-Elementを作成してください。下にスクロールするときは、変換せずに、ページの上部にないときに、以前隠れていた別のコンテナをフェードインしてナビゲーションとして機能させます。今度はスクロールしてスクロール位置を確認し、両方のコンテナの2つの場所が重なっている場合は、ページの上部にないときに使用するコンテナをフェードアウトします。私は別の解決策があるとは思わない。私はしようとする可能性があれば、私は私の投稿を編集します。実際のヘッダーとZインデックス内の別のdivを使って作業してみることもできますが、それは本当に悪くなる可能性があります。

私はあなたが望むものを達成するために全力を行っています。ここにはCodePenがあります。 は、私は2つの異なるdiv要素、する。dynamic-ヘッダと一つの正常ヘッダと呼ばれるものを使用し、Iは、インビューポートのjQueryを検出する機能を追加しました。

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

私はこれがあなたのニーズに合っていることを望みます。また、トランジションにTop-Propertyを使用して、いくつかのCSSを変更しました。そのすべてをCSSクラスに委託して代わりに使うことができますが、これはデモのための最も簡単なソリューションだと思いました。これは、あなたの望むことですか?

編集1:例としてbartaile.comという名前を付けました。私は彼らが作成して作り直した効果を見ました。私はこのために別のCodePenを作っ

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

:何がしなければならないことは、このような構造を作成し、基本的です。 ヘッダ-BGは、ヘッダ・コンテンツは80px、と言うことができ、高さ、透明の背景色を有する0の高さを有します。今、どの方向がスクロールされているかを確認しないでください。エフェクトの唯一の重要な側面は、ビューポートの特定の要素ですか?私は400pxの上から行きました。この要件が満たされたら、ヘッダーをフェードインするだけです - bg。これはラッパーとコンテンツの間にあり、背景を提供します。それと一緒にヘッダーコンテンツの色を変更することもできますが、私はそれをしませんでした。それはbartaile.comがやっていることなので、それを含めることができます。楽しい!

編集2:あなたのコメントに基づいてCodePenを編集しました。それは実際にはhereです。これは次のことを行います:ヘッダーがあります。下にスクロールすると、消えます。スクロールアップでは、それがバックグラウンドを持っていきますが、scrollTopスプライト< 400ようにスクロールしたときに、背景はフェードアウトします。私が理解したところで、これはあなたが望むものです。上記の構造を使用しています。

+0

この効果を達成するより簡単な方法はありませんか? http://bartaile.comは私がインスピレーションとして使用しているものであり、単純に追加しています:ユーザーが最初のパネルをスクロールした後、ユーザーがスクロールしない限りナビが非表示になります。あなたの助けをありがとうあなたのヒントを試してみてください – Dee

+0

投稿を編集しました。 – NikxDa

+0

bartaile.comがやっていることは良い考えです。私は再びCodePenを作成して更新します! – NikxDa

3

私は「bartaile.com」をチェックしています。彼らが使っているのは、「フルページ」と呼ばれる第三者のライブラリです。このような効果を達成するには、fullpage.jsをチェックしてください。これは、フルスクリーンスクロールウェブサイト(シングルページウェブサイトまたはワンページサイトとも呼ばれます)を作成するためのシンプルで使いやすいプラグインです。フルスクリーンスクロールウェブサイトの作成、サイト内のセクション内にいくつかのランドスケープスライダーを追加することができます。

このプラグインは「フルスクリーンスクロール」と通常のスクロールを処理できます。あなたはこれをはるかに容易にして効果を達成することができます