2016-10-26 5 views
1

スクロールスクロール機能を使用してスティッキーヘッダーを作成し、時に特定の高さ(私が推測する)を作成するときは、ページの先頭に戻ります。jQueryウィンドウスクロール、scoll down上に戻る

はこれを録画:http://take.ms/s9mGh8

これは私の関数である:

$(window).scroll(function(e){ 
    $('#main').toggleClass('fixed', $(this).scrollTop() > $('#header').height()+25); 
}); 

がどのように私はこの問題を解決することができますか?

+0

あなたのコードを共有するためにJSFiddleを投稿してください。 –

答えて

1

固定された要素はDOM内にスペースをとらないという問題があります。だから、ここで起こっているのはあなたのヘッダがスペースを取って、ページをスクロールし、position:fixedというヘッダを設定して、それ以上スペースを取らないようにして、すべての要素が上に移動し、スクロールバーが消えるということです。

この動作を防止するには、クラスを変更するときに文書に「欠けている高さ」を追加する必要があります。たとえば、プレースホルダーdivを追加する場合は、StickyKitによって使用されるコミュニケーション技法。あなたがここに基本的なコードを見ることができます

:もちろんhttps://jsfiddle.net/jaL765t1/

var flag = false; 
$(window).scroll(function(e){ 
    var passed_point = $(this).scrollTop() > $('#header').height()+25; 

    if(passed_point && !flag){ 
    var surrogate = $('<div>', { 
     'class' : 'js-surrogate', 
     css : { 
     height : $('#header').height() 
     } 
    }); 
    $('#header').before(surrogate); 
    $('#main').addClass('fixed'); 

    flag=true; 
    }else if(!passed_point && flag){ 
    $('#main').removeClass('fixed'); 
    $('#header').prev('.js-surrogate').remove(); 
    flag=false; 
    } 
}); 

を、このコードは良いはありませんが、簡単に出発点としてそれを使用することができます。

+0

ありがとう、これは非常に役に立ちました – Adrian

0

私はこのようなことをしようとしていると思います。

ヘッダーを固定したい場合、なぜクラスをメインに置くのですか?あなたは、コード

HTML

<div id="main"> 
    <div id="header"></div> 
    <div id="content"></div> 
</div> 

JS

$(window).scroll(function(){ 
if ($(window).scrollTop() >= 2) { 
    $('#header').addClass('fixed'); 
    $("#content").css({"margin-top": $('#header').outerHeight() +"px"}); 
}else { 
    $('#header').removeClass('fixed'); 
    $("#content").css({"margin-top":"0px"}); 
} 
}); 

CSS下に試すことができます

$(function(){ 
 
    $(window).scroll(function(e){ 
 
    //console.log($(this).scrollTop() > $("#header").height()) 
 
    //^--console.log() for testing the Boolean 
 
     $("#header").toggleClass("fixed", $(this).scrollTop() > $("#header").height()) 
 
    }) 
 
})
*{ 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
#header{ 
 
    height:90px; 
 
    background: purple; 
 
} 
 
.fixed{ 
 
    position: fixed; 
 
    top:0; 
 
    left: 0; 
 
    right: 0; 
 
} 
 
.content{ 
 
    height: 4000px; 
 
    background: gray; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script> 
 
<div id="header"> 
 
    Header 
 
</div> 
 
<div class="content"> 
 
    content 
 
</div>

+0

私はページに4-5個の固定項目を持っています。これがメインに固定されているのはなぜですか – Adrian

+1

'main'や' header'にクラスを追加する必要がありますか?スティッキーヘッダーの設定に問題があると思っていました(私はそれがビデオの問題だと思っていました)ので、これは私があなたに示したものです。あなたの 'main'要素がどのように見えるのか分かりません。私はあなたを助けましたか?私はあなたがスクロールする必要があるどのくらい得るために任意の条件がある –

+0

トグルクラスを使用する方法が好きですか?私の機能は大丈夫ですが、私はページ上で20の製品をdusplayしていますが、私はわずか10 =〜ウィンドウの高さしか持っていないので、小さなスクロール領域があり、これが問題だと思っています – Adrian

1
#header{ 
    height : 90px; 
    background-color : grey; 
    width : 100%; 
} 
.fixed{ 
position: fixed; 
top:0; left:0; 
width: 100%; 
z-index: 9999; 
} 

#content{ 
    height : 105vh; 
} 
+0

これは私のためには動作しません..この更新されたコードで – Adrian

+0

の前にこれを試してみました。一度だけチェックしてください。 – Veer

+0

参照コード:https://jsfiddle.net/hirpara_ravi231/L9xv9t4v/ – Veer