2016-05-11 7 views
2

ウェブページの中央に画像があります。ユーザーがスクロールしてイメージがウィンドウの一番上に表示されたら、イメージをページの上部に固定して、ページと共にスクロールさせようとしています。スクロール後にイメージを上に固定/固定 - イメージが上にまっすぐにジャンプしますか?

しかし、ウィンドウの上部に当たったときにこだわるのではなく、ユーザーがスクロールするとすぐに画像がページの上部にジャンプしています。ユーザーがページにいる間、イメージは一番上に固定されていますが、ページが更新されると固定されたままになります。

これを理解できないようです - 助けてください!

index.htmlを

<img src="./assets/img/logo.png" class="logo" alt="Logo"> 

style.cssに

.logo { 
    width: 500px; 
    display: block; 
    position: absolute; 
    top: 200px; 
    left: 0; 
    right: 0; 
    margin: auto; 
} 

main.js

​​

答えて

3

私はあなたがする必要があるすべてはあなたが戻ってスクロールダウンしたときに初期のトップ値をリセットだと思う:

var boxInitialTop = $('.logo').offset().top; 
 
    $(window).scroll(function() { 
 
    if ($(window).scrollTop() > boxInitialTop) { 
 
     $('.logo').css({ 
 
     position: 'fixed', 
 
     top: '0px' 
 
     }); 
 
    } else { 
 
     $('.logo').css({ 
 
     position: 'absolute', 
 
     top: '200px'   // add this to "reset" the top to it's original (that you set in your css) 
 
     }); 
 
    } 
 
    });
body {height:2000px;} 
 

 
#test { 
 
    height: 400px; 
 
    position: relative; 
 
} 
 

 
.logo { 
 
    width: 500px; 
 
    display: block; 
 
    position: absolute; 
 
    top: 200px; 
 
    left: 0; 
 
    right: 0; 
 
    margin: auto; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="test"> 
 
    <img src="http://lorempixel.com/400/200/city/" class="logo" alt="Logo"> 
 
</div>

+0

こんにちはピート - 応答してくれてありがとう!ユーザーがスクロールするとすぐに、イメージは中央から上に瞬時にジャンプします。ユーザーがスクロールしてイメージがウィンドウの一番上に当たったときにのみ、トップに固定しようとしています。 また、イメージを上部に固定し、ページを最新表示したときに元の位置に戻すことをおすすめします。 ご意見はありますか? – domburford

+0

@domburford、あなたは私にとって欲しいと言っていることをしているように見えます(私は最新バージョンのクロムを使用しています) - スニペットのフルページリンクを使用してスクロールダウンを開始すると、あなたはそれの上に着くまで、上にスティック? – Pete

+0

お詫び!私のコードhttps://jsfiddle.net/uot0un4y/からこのフェードとトランジションを削除すると動作します - なぜこれがスクロール&フィックスソリューションに影響するのか分かりません。 – domburford

0
$ (function() { 
    var boxInitialTop = $ ('.logo'). offset(). top ; 
    $ (window). scroll (function () { 
    if ($ (window). scrollTop() > boxInitialTop) { 
     $ ('.logo'). css ({ position : 'relative' , top : '0px' }); 
    } else { 
     $ ('.logo'). css ({ position : 'absolute' }); 
    } 
    }); 
}); 
1

要素の元の配置を、開始位置(elseの後)に戻す必要があります。要素がposition:absoluteに戻ったら、topプロパティが200pxに返されていることを確認する必要があります。それ以外の場合は、fixedのときに設定された値、つまり0が保持されます。

は、以下を参照してください。

$(function() { 
 
    var boxInitialTop = $('.logo').offset().top; 
 
    $(window).scroll(function() { 
 
    if ($(window).scrollTop() > boxInitialTop) { 
 
     $('.logo').css({position: 'fixed', top: '0px'}); 
 
    } else { 
 
     $('.logo').css({position: 'absolute', top : boxInitialTop+'px'}); 
 
    } 
 
    }); 
 
});

+0

こんにちは - あなたのフィードバックをありがとう!この問題は、ユーザーがスクロールを開始した直後に画像がジャンプして上にスティックされることです。中央から真っ直ぐ上に移動します。 – domburford

+0

それは非常に奇妙です。おそらくそれをjsfiddleで複製し、ここに投稿してそこから作業できるようにしてください。 – Frits

2

あなたのコードが動作します。

elseセクションのtopの値をリセットするだけで済みます。 このようにしてifセクションに設定されているので、0pxのままです。

+0

こんにちは - ご回答いただきありがとうございます!コードは機能しますが、ユーザーがスクロールするとすぐに画像が中央から上に瞬時にジャンプします。ユーザーがスクロールして画像がウィンドウの一番上に当たったときにのみ、上に固定するよう試みています。 – domburford

関連する問題