JS的offsetWidth尔当、clientWidth等相關(guān)屬性

offsetWidth 和 offsetHeight

使用offsetWidth是獲取元素的尺寸的(content+padding+border)寬度
offsetWidth是獲取元素寬度最好的方法
如果元素以display:none的形式隱藏掉了蜈缤,那么這個(gè)元素的offsetWidth寬度是0

#box{
  width: 100px;
  height: 100px;
  background-color: red;
  padding: 20px;
  border: 1px solid #000;
  margin: 10px;
/*如果加了dispaly為none踩窖,則獲取的寬度為0*/
  /*display: none;*/
}
var oBox = document.getElementById("box");
console.log(oBox.offsetWidth); //142

clientWidth和clientHeight

使用clientWidth是獲取元素可視化部分的寬度(content + padding的和) 不含邊框

#box{
  width: 100px;
  height: 100px;
  background-color: red;
  padding: 20px;
  border: 1px solid #000;
  margin: 10px;
/*如果加了dispaly為none翘县,則獲取的寬度為0*/
  /*display: none;*/
}
var oBox = document.getElementById("box");
console.log(oBox.clientWidth); //140

scrollWidth和scrollHeight

scrollWidth是獲取元素的滾動(dòng)寬度(包含的內(nèi)容的完全的寬度 + 自身的padding)诺擅,外邊距只會(huì)算一邊市袖。

#box{
   width: 100px;
   height: 100px;
   background-color: red;
   padding: 20px;
   border: 1px solid #000;
   margin: 30px;
   overflow: auto;
}
#con{
   width: 1000px;
   height: 80px;
   padding: 20px;
   border: 1px solid red;
   margin: 10px;
}
<div id="box">
    <div id="con"></div>
</div>
 var oBox = document.getElementById("box");
 console.log(oBox.scrollWidth);//1000+40+2+20 + 20自身padding= 1072

獲取窗口的大小

  • 在js中 提供了兩個(gè)簡(jiǎn)便的操作 document.documentElement === html標(biāo)簽,document.body === body標(biāo)簽.
  • 獲取html標(biāo)簽的clientWidthclientHeight屬性烁涌,就可以獲取到瀏覽器窗口的寬高在怪異模式下凌盯,body是頂層的可視元素付枫,所以在怪異模式下獲取窗口的大小是document.body.clientWidth.
  • 兼容性寫(xiě)法: document.documentElement.clientWidth || document.body.clientWidth
var oHtml = document.getElementsByTagName("html")[0];
var oBody = document.getElementsByTagName("body")[0];
console.log(document.documentElement === oHtml);//true
console.log(document.body === oBody);//true

// 打印瀏覽器窗口的寬高
console.log(document.documentElement.clientHeight);
console.log(document.documentElement.clientWidth);

//獲取窗口高度的兼容性寫(xiě)法
console.log(document.documentElement.clientWidth || document.body.clientWidth);
console.log(document.documentElement.clientHeight || document.body.clientHeight );

offsetLeft和offsetTop

返回當(dāng)前元素的偏移值
在標(biāo)準(zhǔn)模式下以最近的定位父級(jí)為參考的偏移位置(無(wú)論這個(gè)元素是否定位)

<div id="outer">
    <div id="inner">
        <div id="con"></div>
    </div>
</div>
*{margin:0;padding:0;}
#outer{
    width: 500px;
    height: 500px;
    margin: 50px;
    overflow: hidden;
    background-color: red;
    padding: 10px;
    border: 1px solid #000;
    position: relative;
}
#inner{
    width: 300px;
    height: 300px;
    background-color: yellow;
    margin: 20px;
    padding: 10px;
    border: 1px solid #ccc;
    /*position: relative;*/
}
#con{
      width: 100px;
      height: 100px;
      margin: 10px;
      /*position: absolute;*/
      /*left: 40px;*/
      /*top: 40px;*/
      background-color: #0ee69c;
}
var oCon = document.getElementById("con");
console.log(oCon.offsetLeft); //51

offsetParent

獲取一個(gè)元素最近的定位父級(jí) 返回的是定位父級(jí)這個(gè)元素

<div id="outer">
    <div id="inner">
        <div id="con"></div>
    </div>
</div>
#outer{
    width: 500px;
    height: 500px;
    margin: 50px;
    overflow: hidden;
    background-color: red;
    padding: 10px;
    border: 1px solid #000;
    position: relative;
}
#inner{
     width: 300px;
     height: 300px;
     background-color: yellow;
     margin: 20px;
     padding: 10px;
     border: 1px solid #ccc;
     position: relative;
}
#con{
     width: 100px;
     height: 100px;
     margin: 10px;
     position: absolute;
     left: 40px;
     top: 40px;
     background-color: #0ee69c;
}
/*
    * offsetParent
    *  獲取一個(gè)元素最近的定位父級(jí) 返回的是定位父級(jí)這個(gè)元素
    * 
*/
var oCon = document.getElementById("con");
console.log(oCon.offsetParent); //<div id="inner"><div id="con"></div></div>

clientLeft和clientTop

獲取左邊框和上邊框的大小

<div id="outer">
    <div id="inner">
        <div id="con"></div>
    </div>
</div>
#outer{
    width: 500px;
    height: 500px;
    margin: 50px;
    overflow: hidden;
    background-color: red;
    padding: 10px;
    border: 1px solid #000;
}
#inner{
    width: 300px;
    height: 300px;
    background-color: yellow;
    margin: 20px;
    padding: 10px;
    border: 10px solid #ccc;
}
#con{
     width: 100px;
     height: 100px;
     margin: 10px;
     border: 5px solid red;
     background-color: #0ee69c;
}
 /*
    * 設(shè)計(jì)位置-clientLeft和clientTop
    * 獲取左邊框和上邊框的大小
    * parentNode是父節(jié)點(diǎn)
    *
 */
var oCon = document.getElementById("con"); 
console.log(oCon.clientLeft); //5
console.log(oCon.parentNode.clientLeft); //10
console.log(oCon.parentNode.parentNode.clientLeft); //1

整體文檔大小的寬高

對(duì)于標(biāo)準(zhǔn)DOM模式來(lái)說(shuō) 就是獲取html的寬高
對(duì)于非標(biāo)準(zhǔn)模式,就是獲取body的寬高
兼容性代碼:document.documentElement.offsetHeight || document.body.offsetHeight;

<button id="btn">點(diǎn)一下</button>
<div id="outer"></div>
#outer{
     width: 200px;
     height: 2000px;
     border: 1px solid #000;
     overflow: auto;
}
#btn{
     position: fixed;
     left: 0;
     top: 50%;
}
var oOuter = document.getElementById("outer");
var oBtn = document.getElementById("btn");
oBtn.onclick = function () {
      console.log(document.documentElement.offsetWidth || document.body.offsetWidth); //整體文檔的寬看個(gè)人電腦
      console.log(document.documentElement.offsetHeight || document.body.offsetHeight); //2002
}

scrollLeft和scrollTop

可以讀寫(xiě)向左或向上 移出可視區(qū)域外的寬度或高度
其實(shí)就是滾動(dòng)條已經(jīng)滾過(guò)的距離

<button id="btn">點(diǎn)一下</button>
<div id="outer">
    <div id="con"></div>
</div>
#outer{
    width: 200px;
    height: 200px;
    border: 1px solid #000;
    overflow: auto;
}
#con{
    width: 2000px;
    height: 2000px;
    background-color: pink;
}
 /*
    * scrollLeft和scrollTop:
    *   - 可以讀寫(xiě)向左或向上 移出可視區(qū)域外的寬度或高度
    *   - 其實(shí)就是滾動(dòng)條已經(jīng)滾過(guò)的距離
    * 
*/
    var oOuter = document.getElementById("outer");
    var oBtn = document.getElementById("btn");
    oBtn.onclick = function () {
        // oOuter.scrollLeft = 200;  //可寫(xiě)操作
        console.log(oOuter.scrollLeft);
        console.log(oOuter.scrollTop);
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末驰怎,一起剝皮案震驚了整個(gè)濱河市阐滩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌县忌,老刑警劉巖掂榔,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異症杏,居然都是意外死亡装获,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)厉颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)穴豫,“玉大人,你說(shuō)我怎么就攤上這事逼友【啵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵帜乞,是天一觀的道長(zhǎng)司抱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)黎烈,這世上最難降的妖魔是什么习柠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮照棋,結(jié)果婚禮上资溃,老公的妹妹穿的比我還像新娘。我一直安慰自己烈炭,他們只是感情好肉拓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著梳庆,像睡著了一般暖途。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膏执,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天驻售,我揣著相機(jī)與錄音,去河邊找鬼更米。 笑死欺栗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播迟几,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼消请,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了类腮?” 一聲冷哼從身側(cè)響起臊泰,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚜枢,沒(méi)想到半個(gè)月后缸逃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厂抽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年需频,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筷凤。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昭殉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藐守,到底是詐尸還是另有隱情挪丢,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布吗伤,位于F島的核電站,受9級(jí)特大地震影響硫眨,放射性物質(zhì)發(fā)生泄漏足淆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一礁阁、第九天 我趴在偏房一處隱蔽的房頂上張望巧号。 院中可真熱鬧,春花似錦姥闭、人聲如沸丹鸿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)靠欢。三九已至,卻和暖如春铜跑,著一層夾襖步出監(jiān)牢的瞬間门怪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工锅纺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掷空,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像坦弟,于是被迫代替她去往敵國(guó)和親护锤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345