我們現(xiàn)在只探討和垂直滾動有關(guān)的 scrollTop、scrollHeight 屬性。
一、滾動條有關(guān)屬性的正確理解:
假設(shè)有以下Html代碼:
<div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;"> <div style="height:750px;"> </div> </div>
由于內(nèi)部的p標(biāo)簽高度比外部的長,并且外部的p允許自動出現(xiàn)垂直滾動條,所以用瀏覽器打開后,可以看到垂直滾動條。滾動條向下拖動一段距離,看到的頁面效果如下(右部的a、b是我抓圖后,用PS標(biāo)出來的):
那么,這里的外部p 的scrollTop、scrollHeight 屬性到底是什么呢?
有人說,scrollTop等于圖中標(biāo)出的a。scrollHeight 等于外部p的高度500px。其實(shí),都不對。
其實(shí),圖中標(biāo)出的a、b,對我們編程寫js代碼沒有任何具體意義,它僅僅具有象征意義。
實(shí)際上,在js代碼里,滾動條是被抽象為一個“點(diǎn)”來對待的。scrollHeight其實(shí)不是“滾動條的高度”(b),而是表示滾動條需要滾動的高度,即內(nèi)部p的高度750px。而scrollTop表示滾動條(一個點(diǎn))當(dāng)前的位置在750px里占了多少,不是圖中標(biāo)出的a。
這時,我們很嘆服Windows的設(shè)計者,滾動條設(shè)計的如此形象美妙,欺騙了多少頭腦簡單的鼠標(biāo)操作員。a和b的距離分別標(biāo)識滾動條滾動了和需要滾動的距離,它們之間分別有一個對應(yīng)的關(guān)系,但這些不是我們這些開發(fā)應(yīng)用程序的程序員考慮的,是設(shè)計操作系統(tǒng)GUI圖形接口的程序員考慮的。
2判斷垂直滾動條是否到達(dá)底部
廓清了以上的概念,編碼其實(shí)就比較簡單了, 以下是示例代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>下拉滾動條滾到底部了嗎?</title> <script language="JavaScript" src="jQuery-1.4.2.min.js" mce_src="jquery-1.4.2.min.js"></script> <script language="javascript"> $(document).ready(function (){ var nScrollHight = 0; //滾動距離總長(注意不是滾動條的長度) var nScrollTop = 0; //滾動到的當(dāng)前位置 var nDivHight = $("#div1").height(); $("#div1").scroll(function(){ nScrollHight = $(this)[0].scrollHeight; nScrollTop = $(this)[0].scrollTop; if(nScrollTop + nDivHight >= nScrollHight) alert("滾動條到底部了"); }); }); </script> <body> <div id="div1" style="overflow-y:auto; overflow-x:hidden; height:500px;"> <div style="background-color:#ccc; height:750px;">IE 和 FF 下測試通過</div> </div> </body> </html>
代碼解說:
內(nèi)部div高度為750,外部div高度為500,所以垂直滾動條需要滾動750-500=250的距離,就會到達(dá)底部,參見語句nScrollTop + nDivHight >= nScrollHight。
程序中,在外部div的scroll(滾動)事件中偵測和執(zhí)行if判斷語句,是非常消耗CPU資源的。用鼠標(biāo)拖拉滾動條,只要有一個像素的變動就會觸發(fā)該事件。但點(diǎn)擊滾動條兩頭的箭頭,事件觸發(fā)的頻率會低得多。所以滾動條的scroll事件要謹(jǐn)慎使用。
本示例判斷的是沒有水平滾動條的情況,在有水平滾動條時,情況會有細(xì)小的變化,所以nScrollTop + nDivHight >= nScrollHight語句中,需要用“>=”比較運(yùn)算符,而沒有水平滾動條的時候,等號“=”就足夠了。大家可以實(shí)際測試一下。還可以判斷水平滾動條是否滾動到頭了。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com