2011-09-19 12 views
9

私はオンラインで書籍を読むためのウェブページを持っています。私は文書内の位置を保存したいので、ユーザーが読書を再開したとき、彼は以前の場所で開始します。HTML/Javascript:ウィンドウのサイズに関係なくスクロールを記憶する

私はwindow.pageYOffsetのようなものを使ってスクロールすることができますが、これはブラウザのウィンドウサイズによって異なります。つまり、ウィンドウを狭くすると、同じテキストが別のスクロールに表示されます(例のイメージを参照)。

私は、ウィンドウサイズの独立したスクロール測定方法を考え出す必要があります。何か案は?

注:これは、Mozillaベースのブラウザでのみ動作する必要があります。

Problem example

私の仮定は、文書の高さに対する相対的なscrollTopスプライト値が常に同じであることが正しければ、事前

+0

+1、私は一日中見たことがあります! – Brad

+0

私はポジションに大きな違いはありません。あなたが見た最大の逸脱は何ですか? –

+2

も参照してください:http://stackoverflow.com/questions/7331701/how-to-know-what-lines-chars-are-currently-visible-in-a-textareaもしあなたがそれを理解できれば、次回ロード時にアンカーなどの要素にドロップしてscrollToを実行できます。 – Brad

答えて

1

のおかげでは、問題ではなく、単純に解決することができます。 read_cookieであることを

var read_percentage = read_cookie('read_percentage'); 
document.body.scrollTop = document.body.offsetHeight * read_percentage 

注:あなたが身体にscrollTopスプライト値を設定することで、位置を復元することができ

var read_percentage = document.body.scrollTop/document.body.offsetHeight; 
document.cookie = 'read_percentage=' + read_percentage + '; expires=Thu, 2 Aug 2021 20:47:11 UTC; path=/' 

次のページのロードの場合:

まず、読み取り割合でクッキーを設定しますブラウザ機能ではありません。あなたはそれを実装する必要があります。例はhttp://www.quirksmode.org/js/cookies.htmlにあります。

これを大きなページでテストしたところ、かなりうまく動作しました。

2

Aaaaaaand私のバージョンです後半...再び...しかし、少なくとも、私はデモを持っている:

私の方法はまた、パーセント使用しています(スクロール位置を/(スクロールの高さ - コンテナの高さ))

http://jsfiddle.net/wJhFV/show

$(document).ready(function(){ 
    var container = $("#container")[0]; 
    container.scrollTop = 
     Number(localStorage["currentPosition"]) * 
     (container.scrollHeight - $(container).height()) 

}) 

$("#container").scroll(function(){ 
    console.log("set to: ") 
     console.log(
     localStorage["currentPosition"] = 
      (this.scrollTop)/
      (this.scrollHeight - $(this).height()) 
     ); 
}) 
関連する問題