JS常用API手冊(cè)7-定位

oDiv.clientWidth, oDiv.clientHeight

兼容性:全兼容
內(nèi)容區(qū)域的寬度、高度黍衙,不包括邊框[裸的寬度和高度]
content_width+padding_left+padding_right, content_height+padding_top+padding_bottom
注:

  • 返回的寬度和高度[此值比較準(zhǔn)確, CSS中給定值后才有效]
  • 返回的是屏幕上可以看到的大小亦渗,有滾動(dòng)條比實(shí)際值小

oDiv.scrollWidth, oDiv.scrollHeight

兼容性:IE8+预明,Opera11+
返回的是實(shí)際的寬度和高度[包括隱藏的部分]
滾動(dòng)的高度+可視區(qū)域的高度
注:

  • 沒(méi)有隱藏部分柠逞,等價(jià)于clientWidth, clientHeight
  • 有滾動(dòng)條時(shí)套像,scrollHeight = scrollTop + clientHeight

oDiv.offsetWidth, oDiv.offsetHeight

兼容性:全兼容
所占實(shí)際的大小(不受內(nèi)部子元素大小的影響衣撬,只和本身元素大小的設(shè)定有關(guān))
width + padding + border
悟:可以計(jì)算滾動(dòng)條的寬度offsetWidth - border*2 - clientWidth

# 獲取滾動(dòng)條的寬度
function getScrollbarWidth(){
    var el = document.createElement('p');
    styles = {
        width:'100px',
        height:'100px',
        overflowY:'scroll'
    };
    for(var i in styles){
        el.style[i] = styles[i];
    }
    document.body.appendChild(el);
    var scrollbarWidth = el.offsetWidth - el.clientWidth;
    el.remove();
    return scrollbarWidth;
}

窗口視口的大小

獲取window窗體的內(nèi)部寬度乖订,不包括用戶界面元素,比如窗框
W3C:window.innerWidth, window.innerHeight[IE9+][只讀]
注:不包括地址欄等具练,只是顯示內(nèi)容的視口的高度

可視區(qū)域的高度

window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight

clientWidth/clientHeight

[不包括滾動(dòng)條][在頁(yè)面中所占的寬度除去滾動(dòng)條的寬度]
包括padding+content

# IE
document.documentElement.clientWidth
document.documentElement.clientHeight

# IE7之前的版本
document.body.clientWidth,document.body.clientHeight

oDiv.clientLeft/oDiv.clientTop

兼容性:全兼容
左邊框的寬度乍构,上邊框的寬度
注:只能是左邊和上邊的寬度
內(nèi)容區(qū)域相對(duì)于元素左上角的位置,即border_left_width, border_top_width

oDiv.offsetLeft/oDiv.offsetTop

兼容性:全兼容

  • 表示相對(duì)于最近的祖先定位元素(CSS position 屬性被設(shè)置為 relative扛点、absolute 或 fixed 的元素)的左右偏移值
  • position不是static的元素
    說(shuō)明:
  1. 返回距離父元素左邊和高度的距離
  2. 必須設(shè)置了定位才能計(jì)算[即offsetParent]
  3. 包括margin + 父元素的padding + 父元素的borderWidth[完全屬于自己的部分距離完全屬于父元素的部分]
    注:offsetParent取最近的那個(gè)父級(jí)元素
  • 在IE6/7中
    offsetLeft = (offsetParent的padding-left) + (當(dāng)前元素的margin-left)
  • 在IE8/9/10及Chrome中
    X offsetLeft = (offsetParent的margin-left) + (offsetParent的border寬度) + (offsetParent的padding-left) + (當(dāng)前元素的margin-left)X就是距離offsetParent邊框的 距離

oDiv.scrollLeft/oDiv.scrollTop

兼容性:[全兼容][可讀可寫]
釋義:當(dāng)元素其中的內(nèi)容超出其寬高的時(shí)候哥遮,元素被卷起的高度和寬度[指的是擁有滾動(dòng)條的元素而非子元素]
注:有滾動(dòng)條的元素的滾動(dòng)距離
eg: outer, inner,只有outer的這個(gè)屬性才有意義

jQuery部分

.position()
相對(duì)于offsetParent的當(dāng)前坐標(biāo)值

{
    left:相對(duì)于offsetParent元素左側(cè)的距離陵究,
    top :相對(duì)于offsetParent元素頂部的距離
}

.scrollLeft() || .scrollTop()

釋義1:相對(duì)于水平滾動(dòng)條左邊的距離眠饮,滾動(dòng)條居左或元素不能滾動(dòng),值為0
釋義2:相對(duì)于垂直滾動(dòng)條頂部的距離铜邮,滾動(dòng)條居頂或元素不能滾動(dòng)仪召,值為0

clientX, clientY

兼容性:全兼容
釋義:相對(duì)于瀏覽器(可視區(qū)域左上角0,0)的坐標(biāo)
返回發(fā)生時(shí)鼠標(biāo)在視口中的坐標(biāo)
鼠標(biāo)相對(duì)于window的偏移
IOS上=pageX,pageY

ayerX, layerY/offsetX, offsetY

兼容性:很糟糕
返回發(fā)生時(shí)鼠標(biāo)相對(duì)于目標(biāo)對(duì)象的坐標(biāo)
Opera支持addEventListener,但不支持layerX, layerY
bug解釋:
在IE7以及以下瀏覽器下松蒜,只有當(dāng)當(dāng)前目標(biāo)元素為offsetParent是才計(jì)算坐標(biāo)值扔茅,否則,它就會(huì)拿當(dāng)前目標(biāo)元素的offsetParent來(lái)計(jì)算秸苗。還有召娜,當(dāng)發(fā)現(xiàn)元素應(yīng)用了position: relative后,IE會(huì)去尋找下一個(gè)offsetParent來(lái)計(jì)算offsetY惊楼,但又不是offsetX萤晴。是的吐句,讀兩次胁后,很蛋疼吧店读!

pageX/pageY(W3C)

兼容性:IE9+
返回的是相對(duì)于頁(yè)面的坐標(biāo)
鼠標(biāo)相對(duì)于document的坐標(biāo)

# 拖動(dòng)實(shí)例思路
# 元素必須有定位屬性
mousedown

#記錄元素左上角位置
var startLeft = layerX/offsetX
var startTop = layerY/offsetY
# mousemove
# mouseup

注:

  • 可能會(huì)出現(xiàn)禁止光標(biāo),可以禁止默認(rèn)事件
  • 拖動(dòng)的情況比較復(fù)雜,建議用第三方腳本

跳轉(zhuǎn)到可見區(qū)域內(nèi)

$("#logo_bbc")[0].scrollIntoView();
window.scrollTo(0, 0);

pageXOffset,pageYOffset

兼容性:IE9+
表示整個(gè)頁(yè)面滾動(dòng)的像素值(水平方向的和垂直方向的)

window.pageXOffset
window.pageYOffset

CSS-位置

  • element.offsetParent 返回元素的偏移容器[元素的第一個(gè)祖先定位元素攀芯,用來(lái)計(jì)算offsetLeft屯断,offsetTop(不一定與parentNode相等)]。
    注:在IE和Opera瀏覽器下侣诺,position: fixed的元素沒(méi)有offsetParent
  • element.offsetLeft 返回元素的水平偏移位置殖演。
  • element.offsetTop 返回元素的垂直偏移位置。
  • element.scrollTop 返回元素上邊緣與視圖之間的距離年鸳。[元素被隱藏的上方的距離]
  • element.scrollLeft 返回元素左邊緣與視圖之間的距離趴久。
  • document.documentElement.scrollTop 垂直方向滾動(dòng)的值

CSS-尺寸

  • element.scrollWidth 返回元素的實(shí)際寬度。[元素內(nèi)容 + 內(nèi)邊距(包括滾動(dòng)條)]
  • element.scrollHeight 返回元素的實(shí)際高度搔确。
document.body.scrollWidth   document.body.scrollHeight
//給定寬高小于瀏覽器窗口
scrollWidth和scrollHeight通常是此瀏覽器窗口的寬高

//給定寬高大于瀏覽器窗口彼棍,且子元素小于給定寬高
寬高為設(shè)定的寬高+padding*2+border*2

//給定寬高大于瀏覽器窗口,且內(nèi)容大于給定寬高
寬高為子元素的寬高 +body的padding[1個(gè)]+margin[1個(gè)]+border[1個(gè)]

//[無(wú)滾動(dòng)軸時(shí)]
scrollWidth = clientWidth = style.width + style.padding * 2

//[有滾動(dòng)軸時(shí)]
scrollWidth = 實(shí)際內(nèi)容的寬度 + padding * 2
scrollHeight = 實(shí)際內(nèi)容的高度 + padding * 2
  • element.clientWidth 返回元素的可見寬度膳算。[元素內(nèi)容 + 內(nèi)邊距(不包括滾動(dòng)條)]
  • element.clientHeight 返回元素的可見高度座硕。
  • element.offsetHeight 返回元素的高度。[元素內(nèi)容 + 內(nèi)邊距 + 邊框(不包括外邊距)]
  • element.offsetWidth 返回元素的寬度涕蜂。
  • element.innerWidth 返回元素內(nèi)部的寬高华匾,包括padding,不包括border
  • element.outerWidth 返回元素集合中第1個(gè)元素當(dāng)前計(jì)算寬高度值机隙,包括padding蜘拉,border,選擇性的margin
    window.outerWidth表示整個(gè)瀏覽器窗體的大小有鹿,包括任務(wù)欄等[IE9+]
  • element.outerHeight
    window.outerHeight表示整個(gè)瀏覽器窗體的大小旭旭,包括地址欄,收藏欄印颤,標(biāo)簽欄您机,任務(wù)欄等[IE9+]

jQuery相關(guān)部分

.width() || .height()
只包含content的凈寬高,不包括margin,border,padding

.width()與.css('width')區(qū)別
.width()返回結(jié)果無(wú)單位
.css('width')的結(jié)果有單位

.innerWidth() || .innerHeight()
釋義:content + padding

.outerWidth() || .outerHeight()
釋義:content + padding + border

.outerWidth(true) || .outerHeight(true)
釋義:content + padding + border + margin

getBoundingClientRect

返回一個(gè)對(duì)象年局,包含top,left,right,bottom,width,height

  • width际看、height 元素自身寬高
  • top 元素上外邊界距窗口最上面的距離
  • right 元素右外邊界距窗口最上面的距離
  • bottom 元素下外邊界距窗口最上面的距離
  • left 元素左外邊界距窗口最上面的距離
  • width 元素自身寬(包含border,padding)
  • height 元素自身高(包含border,padding)

通常認(rèn)為 <html> 元素是在 Web 瀏覽器的視口中滾動(dòng)的元素(IE6 之前版本運(yùn)行在混雜模式下時(shí)是 <body> 元素)因此,帶有垂直滾動(dòng)條的頁(yè)面總高度就是 document.documentElement.scrollHeight

// 在沒(méi)有滾動(dòng)條的情況下矢否,元素內(nèi)容的總高度
scrollHeight

// 在沒(méi)有滾動(dòng)條的情況下仲闽,元素內(nèi)容的總寬度
scrollWidth

// 被隱藏在內(nèi)容區(qū)域左側(cè)的像素?cái)?shù)。通過(guò)設(shè)置這個(gè)屬性可以改變?cè)氐臐L動(dòng)位置
scrollLeft

// 被隱藏在內(nèi)容區(qū)域上方的像素?cái)?shù)僵朗。通過(guò)設(shè)置這個(gè)屬性可以改變?cè)氐臐L動(dòng)位置
scrollTop
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赖欣,一起剝皮案震驚了整個(gè)濱河市屑彻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顶吮,老刑警劉巖社牲,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異悴了,居然都是意外死亡搏恤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門湃交,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)熟空,“玉大人,你說(shuō)我怎么就攤上這事搞莺∠⒙蓿” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵才沧,是天一觀的道長(zhǎng)迈喉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)糜工,這世上最難降的妖魔是什么弊添? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮捌木,結(jié)果婚禮上油坝,老公的妹妹穿的比我還像新娘。我一直安慰自己刨裆,他們只是感情好澈圈,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帆啃,像睡著了一般瞬女。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上努潘,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天诽偷,我揣著相機(jī)與錄音,去河邊找鬼疯坤。 笑死报慕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的压怠。 我是一名探鬼主播眠冈,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菌瘫!你這毒婦竟也來(lái)了蜗顽?” 一聲冷哼從身側(cè)響起布卡,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雇盖,沒(méi)想到半個(gè)月后忿等,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刊懈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年这弧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虚汛。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖皇帮,靈堂內(nèi)的尸體忽然破棺而出卷哩,到底是詐尸還是另有隱情,我是刑警寧澤属拾,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布将谊,位于F島的核電站,受9級(jí)特大地震影響渐白,放射性物質(zhì)發(fā)生泄漏尊浓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一纯衍、第九天 我趴在偏房一處隱蔽的房頂上張望栋齿。 院中可真熱鬧,春花似錦襟诸、人聲如沸瓦堵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)菇用。三九已至,卻和暖如春陷揪,著一層夾襖步出監(jiān)牢的瞬間惋鸥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工悍缠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卦绣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓扮休,卻偏偏與公主長(zhǎng)得像迎卤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玷坠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案蜗搔? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,756評(píng)論 1 92
  • Window和document對(duì)象的區(qū)別 window對(duì)象window對(duì)象表示瀏覽器中打開的窗口window對(duì)象是...
    FConfidence閱讀 2,210評(píng)論 0 5
  • 本文是針對(duì)剛學(xué)編程的小白,都是一些基礎(chǔ)知識(shí),如果想了解更多深層一點(diǎn)的東西,歡迎移步本人博客!! 博客地址 點(diǎn)擊跳轉(zhuǎn)...
    西巴擼閱讀 578評(píng)論 0 2
  • 原文鏈接 http://blog.poetries.top/2016/12/13/js-props聲明:本文根據(jù)慕...
    程序員poetry閱讀 3,296評(píng)論 1 44
  • 這幾天都在做時(shí)間調(diào)整劲藐,計(jì)劃11點(diǎn)睡覺,但一直都沒(méi)有做到樟凄。白天感到忙忙碌碌聘芜,但效率低下。為了更好掌控自己的時(shí)間缝龄,計(jì)劃...
    小鴉說(shuō)事閱讀 223評(píng)論 0 0