javascript與CSS復(fù)習(xí)(三)
function getX(e) {
//通用化事件對(duì)象
e = e || window.event;
//先檢查非IE瀏覽器的位置,在檢查IE的位置
return e.pageX || e.clientX + document.body.scrollLeft;
}
//獲取光標(biāo)的垂直位置
function getY(e) {
//通用化事件對(duì)象
e = e || window.event;
//先檢查非IE瀏覽器的位置,在檢查IE的位置
return e.pageY || e.clientY + document.body.scrollTop;
}
像在FF中e.pageX就是在整個(gè)頁(yè)面中的X坐標(biāo)(包括滾動(dòng)條的滾動(dòng)距離), 而在IE中e.clientX表示當(dāng)前顯示在用戶面前視圖中的X坐標(biāo),還要加上document.body.scrollLeft(橫向滾動(dòng)條的距離)才是完整的X坐標(biāo)位置。
下面的一個(gè)概念是視口(viewport),可以看作是瀏覽器滾動(dòng)條內(nèi)的一切東西。視口還包含的部分組件是視口窗口、頁(yè)面和滾動(dòng)條等。
獲得頁(yè)面的尺寸:
function pageHeight() {
return document.body.scrollHeight;
}
//返回頁(yè)面的寬度
function pageWidth() {
return document.body.scrollWidht;
}
其中的scrollHeight和scrollWidth(點(diǎn)擊查閱),它們?cè)敿?xì)描述了元素的潛在寬度和高度,而不只是當(dāng)前所看到的尺寸。
接下來(lái)我們要去獲取滾動(dòng)條的位置,換言之頁(yè)面相對(duì)于視口的頂端距離。
function scrollX() {
//一個(gè)快捷方式,用在IE6/7的嚴(yán)格模式中
var de = document.documentElement;
//如果瀏覽器存在pageXOffset屬性,則使用它
return self.pageXOffset ||
//否則,嘗試獲取根節(jié)點(diǎn)的左端滾動(dòng)偏移量
(de && de.scrollLeft) ||
//最后,嘗試獲取body元素的左端滾動(dòng)偏移量
document.body.scrollLeft;
}
//確定瀏覽器垂直滾動(dòng)位置的函數(shù)
function scrollY() {
//一個(gè)快捷方式,用在IE6/7的嚴(yán)格模式中
var de = document.documentElement;
//如果瀏覽器存在pageYOffset屬性,則使用它
return self.pageYOffset ||
//否則,嘗試獲取根節(jié)點(diǎn)的頂端滾動(dòng)偏移量
(de && de.scrollTop) ||
//最后,嘗試獲取body元素的頂端滾動(dòng)偏移量
document.body.scrollTop;
}
下面我們來(lái)看看如何移動(dòng)滾動(dòng)條,我們可以用scrollTo方法,它作為window對(duì)象的一個(gè)屬性而存在,它帶有兩個(gè)參數(shù),即x和y偏移量,可以滾動(dòng)到視口指定位置,兩個(gè)例子
window.scrollTo(0,0)
//如果需要滾動(dòng)到指定元素,則可以這樣
window.scrollTo(0, pageY(document.getElementById('content')));
如果對(duì)pageY函數(shù)不熟悉了,可以往回復(fù)習(xí)下,用來(lái)獲得元素在整個(gè)文檔中的位置,再給出一遍,讓自己也鞏固下
function pageY(elem) {
//查看我們是否位于根元素
return elem.offsetParent ?
//如果我們能繼續(xù)得到上一個(gè)元素,增加當(dāng)前的偏移量并繼續(xù)往上遞歸
elem.offsetTop + pageY(elem.offsetParent):
//否則,獲取當(dāng)前的偏移量
elem.offsetTop;
}
我們下面來(lái)學(xué)習(xí)如何獲得視口(viewport)的尺寸,獲取視口的尺寸就可以深入了解用戶當(dāng)前可以看到的內(nèi)容有多少。
function windowHeight() {
//一個(gè)快捷方式,用在IE6/7的嚴(yán)格模式中
var de = document.documentElement;
//如果瀏覽器存在innerHeight屬性,則使用它
return self.innerHeight ||
//否則,嘗試獲取根節(jié)點(diǎn)高度
(de && de.clientHeight) ||
//最后,嘗試獲取body元素的高度
document.body.clientHeight;
}
//獲取視口的寬度
function windowWidth() {
//一個(gè)快捷方式,用在IE6/7的嚴(yán)格模式中
var de = document.documentElement;
//如果瀏覽器存在innerWidth屬性,則使用它
return self.innerWidth ||
//否則,嘗試獲取根節(jié)點(diǎn)寬度
(de && de.clientWidth) ||
//最后,嘗試獲取body元素的寬度
document.body.clientWidth;
}
可能你會(huì)對(duì)innerHeight,clientHeight等屬性有些疑惑,那就直接點(diǎn)擊它,Mozilla Developer center里解釋的很清楚。
最后來(lái)講一個(gè)比較有意思的效果,現(xiàn)在web前端中也很流行——"拖拽",作者沒有給出具體的實(shí)現(xiàn),而是引用了一個(gè)不錯(cuò)的js庫(kù),dom-drag.js,可以學(xué)習(xí)下高手的源碼,同時(shí)介紹了好幾個(gè)流行的js庫(kù),jquery也在其中。好了javascript與css的復(fù)習(xí)到這了,有什么問(wèn)題歡迎留言討論。
相關(guān)文章
JavaScript String 對(duì)象常用方法總結(jié)
下面小編就為大家?guī)?lái)一篇JavaScript String 對(duì)象常用方法總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-04-04
JS動(dòng)態(tài)顯示倒計(jì)時(shí)效果
這篇文章主要介紹了JS實(shí)現(xiàn)倒計(jì)時(shí)效果動(dòng)態(tài)顯示倒計(jì)時(shí)功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
關(guān)于better-scroll插件的無(wú)法滑動(dòng)bug(2021通過(guò)插件解決)
這篇文章主要介紹了關(guān)于better-scroll插件的無(wú)法滑動(dòng)bug(2021通過(guò)插件解決),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
JS獲取整個(gè)頁(yè)面文檔的實(shí)現(xiàn)代碼
就是在當(dāng)前頁(yè)面用AJAX請(qǐng)求當(dāng)前頁(yè)面,返回的就是整個(gè)頁(yè)面的HTML··既然是整個(gè)頁(yè)面,所以也包括文檔聲明2011-12-12
完美實(shí)現(xiàn)js焦點(diǎn)輪播效果(二)(圖片可滾動(dòng))
這篇文章主要為大家詳細(xì)介紹了完美實(shí)現(xiàn)js焦點(diǎn)輪播效果的相關(guān)代碼,采用輔助圖片實(shí)現(xiàn)圖片無(wú)限滾動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
javascript實(shí)現(xiàn)iframe框架延時(shí)加載的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)iframe框架延時(shí)加載的方法,可基于setTimeout實(shí)現(xiàn)這一功能,是非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10
input 標(biāo)簽實(shí)現(xiàn)輸入框帶提示文字效果(兩種方法)
這篇文章主要介紹了input 標(biāo)簽實(shí)現(xiàn)輸入框帶提示文字效果(兩種方法),需要的朋友可以參考下2017-10-10

