2011-09-20 79 views

回答

1

對於需要使用document.documentElement.scrollTop/scrollLeft/scrollHeight/scrollWidth視更好的例子。有一個輕微的複雜性:我認爲在怪癖模式(document.compatMode"BackCompat")您需要檢查這些屬性document.body而不是document.documentElement

查看https://developer.mozilla.org/en/DOM/element.scrollTop的文檔。

編輯:看起來你並不是真的對視口感興趣,而是對它的內容感興趣。 AFAIK沒有通用的方式來獲取網頁特定區域的內容。它絕對不能用一個單一的Range對象來描述,而是一組範圍。即使如此:如果元素有很多文本,並且它全部是一個TextNode,您將不知道文本的哪些部分可見,哪些不可見。

但是,在某些特殊情況下(特別是當頁面結構很簡單時),您可能可以通過使用range.getBoundingClientRect()來了解顯示哪些文本。您首先選擇範圍內的所有內容,然後縮小該範圍,直到範圍大小位於視口邊界內。

下面是一個包含大量文本的垂直滾動<div>的示例:http://jsfiddle.net/5vEdP/(在Firefox 6,Chrome 14和IE 9中測試過)。首先需要確保每個文本字符都放在它自己的TextNode中,否則,您將無法在Range對象中單獨選擇它。然後選擇文本的容器並移動範圍的開始,直到範圍的頂部邊界低於容器的頂部邊界。然後它通過移動範圍的末尾爲底部邊界做同樣的事情。最後你會得到一個只選擇完全可見的文本節點的範圍。

+0

我已經檢查過這個解決方案(就像http://stackoverflow.com/questions/7477144/html-javascript-remember-scroll-independent-of-the-window-size)。這只是一個aproximation和工作錯誤的窗口調整大小。 –

+0

@JonathanNuñezAguin:如果你對視口的內容感興趣,而不是視口本身,那麼如果你這麼說的話,它會很有幫助。查看我的答案更新。 –

+0

是的,我對它的內容很感興趣。我想獲得視口中第一個可見單詞的「句柄」。起初用xul的document.elementFromPoint嘗試過,但是這有一個問題:它會給我包含div,它可以在視口之前很久就開始。所以我認爲有可能使用範圍的解決方案... –

-1

width:document.body.offsetWidth; height:document.body.offsetHeight;

HERE是各種瀏覽器

+0

我已經嘗試過,但它的工作原理錯誤,當窗口已調整大小... –

+0

這是一個標準的網站,這個問題是特別針對XUL。 – macguru2000