2011-12-27 5 views
0

自分のページの1つに「後方互換性のある」スクロールサイドバーを設定したいと思います。画面のスクロールに続くコンテナ

私は、非常に長くなる可能性のある魚種に関する情報とそれに付随する画像を含むページを持っています。

画像は右側のペインに表示されており、ページの下部までスクロールする際にユーザーにフォローしてもらいたいと思います。

jQuery().ready(function($) { 
    var $scrollingDiv = $("#sidebar"); 

    $(window).scroll(function(){    
     $scrollingDiv 
      .stop() 
      .animate({"marginTop": ($(window).scrollTop() + 30) + "px"}, "slow");   
    }); 
}); 

をしかし、スクロールダウンするとき、それはあまりにも遠くにジャンプ:

私はある程度の成功を収めて、次のコードを使用しました。

(元の位置)

SIDEBAR - ORIGINAL POSITION

(シングルマウスホイールのクリックをスクロール)

SIDEBAR - SCROLLED POSITION

ページを下にスクロール起動すると、サイドバーが半分の周りに表示されます - そのように、あなたは2つの画像しか見ることができません。

ユーザーが過去のXポイント(たとえば400ピクセル)をスクロールすると、サイドバーがページで移動を開始します。ただし、ユーザーがページの上部にもう一度アクセスすると、元の位置に戻る必要があります。

このコードに適用できる修正プログラムがありますか、それとももっと良い方法ですか?

---------------------------------------------------------------------------------

EDIT:position:fixed問題

私はジョシュとデビッドの提案(JSコードのいずれかのビット)ごとにposition:fixedを適用しようとすると、この問題が発生した:

Sidebar with FIXED positioning

この要素に添付されたCSSスタイルのFirebugによる読み込みは次のとおりです。

Sidebar with FIXED positioning CSS

答えて

2

このためにプラグインを使用することはできますが、それはあなた自身でも同様に簡単な作業です。

この単純なマークアップ考えてみましょう:

<div id="content">Content</div> 
<div id="sidebar"><div>Sidebar</div></div> 

をそして、これはあなたが必要とするすべてのjavascriptのようになります。今

var el = $('#sidebar'), 
    pos = el.position().top; 

$(window).scroll(function() { 
    el.toggleClass('fixed', $(this).scrollTop() >= pos); 
}); 

が、それはユーザー次第、#sidebar divのにクラスを追加しますサイドバーよりもスクロールしているので、今必要なのはCSSです。私は、レイアウトの問題を避けるために、子要素に固定位置を適用しています:http://jsfiddle.net/QZyH3/

+0

こんにちはDavid。ありがとうございました。私は元の投稿を修正して、「位置:固定」で発生する問題を示しました。 – dunc

+0

@dunc私のデモとCSSの例を見ると、サイドバーの子要素に固定の位置付けが適用されました。そうすることで、あなたはポジショニングの問題を避けることができます。 – David

+0

あなたは先生、天才です! :) どうもありがとうございました。 – dunc

2

あなたは、Appleのショッピングカートのサイドバーを複製this tutorialで見つかったjQueryのコードを、試してみてください。これは、実用的なデモと非常に小さなコードフットプリントを持っています。

+0

こんにちはジョシュ:

#sidebar.fixed > div{position:fixed;} 

は、私はここで本当に簡単なデモを置きます。私はちょうどこれで行ったが、私の左のペインは "浮動小数点:左"と私の右ペイン "浮動小数点:右"を使用しています。このチュートリアルで絶対位置指定を使わずにコードを実行する方法はありますか? – dunc

+0

この例では、左側のサイドバーは左に浮動し、右側のサイドバーは絶対的に配置されています。 Chromeで検査して、右側のサイドバーでその位置を削除して右に浮かせば、まったく同じように動作します。 –

+0

クイックレスポンスのおかげでジョシュ。私はそれを行うときに起こる問題を示すためにオリジナルの投稿を修正しました。 – dunc

1

なぜCSSを使用しないのですかposition: fixed;?もちろん、divがスムーズではなく、スクロールトップにまっすぐに従ってもかまいません。私はそれがIE6だけでは動作しないことを発見しました。今日は固定位置を使用することが良い解決策だと思います。そうでなければ、window.scrollTopでDOMを取得し、要素の絶対位置に割り当てます。

関連する問題