JavaScript BOM

什么是BOM

DOM是一套操作HTML標(biāo)簽的API(接口/方法/屬性)
BOM是一套操作瀏覽器的API(接口/方法/屬性)

常見(jiàn)的BOM對(duì)象
window:代表整個(gè)瀏覽器窗口(window是BOM中的一個(gè)對(duì)象妓蛮,并且是頂級(jí)的對(duì)象)
Navigator :代表瀏覽器當(dāng)前的信息府喳,通過(guò)Navigator我們可以獲取用戶當(dāng)前使用的是什么瀏覽器
Location: 代表瀏覽器當(dāng)前的地址信息,通過(guò)Location我們可以獲取或者設(shè)置當(dāng)前的地址信息
History:代表瀏覽器的歷史信息袱吆,通過(guò)History我們可以實(shí)現(xiàn)上一步/刷新/下一步操作(出于
對(duì)用戶的隱私考慮,我們只能拿到當(dāng)前的瀏覽記錄距淫,不能拿到所有的歷史記錄)
Screen:代表用戶的屏幕信息

Navigator(獲取用戶當(dāng)前瀏覽器信息)

 let agent = window.navigator.userAgent;
    if(/chrome/i.test(agent)){
        alert("谷歌");
    }else if(/firefox/i.test(agent)){
        alert("火狐");
    }else if(/msie/i.test(agent)){
        alert("低級(jí)IE瀏覽器");
    }else if("ActiveXObject" in window){
        alert("低級(jí)IE瀏覽器");
    }

Location

window.location.href;  //獲取當(dāng)前地址欄的地址
window.location.href = “http://www.baidu.com”; // 設(shè)置當(dāng)前地址欄的地址
window.location.reload();  //刷新
window.location.reload(true);  //強(qiáng)制刷新

History

可以通過(guò)History來(lái)實(shí)現(xiàn)刷新绞绒、上一步、下一步

window.history.forword(); //上一步
 window.history.back();  //下一步
 window.history.go(0);  //接收參數(shù) 0   表示刷新當(dāng)前頁(yè)面
 window.history.go(2); //接收正整數(shù)  表示前進(jìn)2個(gè)頁(yè)面
 window.history.go(-2); //接收負(fù)整數(shù)  表示后退2個(gè)頁(yè)面
##獲取元素寬高的方法
1. getComputedStyle();
獲取的寬高不包括邊框和內(nèi)邊距
既可以獲取行內(nèi)寬高榕暇,也可以獲取CSS設(shè)置的寬高
只能獲取处铛,不能設(shè)置
只支持IE9以上的瀏覽器
```JavaScript
let oDiv = document.querySelector("div");
let oStyle = getComputedStyle(oDiv);
console.log(oStyle.height);//獲取高
console.log(oStyle.width);//獲取寬
  1. 通過(guò)currentStyle獲取
    獲取的寬高不包括邊框和內(nèi)邊距
    既可以獲取行內(nèi)寬高,也可以獲取CSS設(shè)置的寬高
    只能獲取拐揭,不能設(shè)置
    只支持IE9以下的瀏覽器
let oDiv = document.querySelector("div");
let oStyle = oDiv.currentStyle;
console.log(oStyle.height);//獲取高
console.log(oStyle.width);//獲取寬
  1. 通過(guò)style獲取
    獲取的寬高不包括邊框和內(nèi)邊距
    可以獲取行內(nèi)寬高撤蟆,但不可以獲取CSS設(shè)置的寬高
    可以獲取,也可以設(shè)置
    高級(jí)低級(jí)瀏覽器都支持
let oDiv = document.querySelector("div");
console.log(oDiv.style.height);//獲取高
console.log(oDiv.style.width);//獲取寬
  1. offsetWidth 和 offsetHeight
    獲取的寬高包含 邊框 + 內(nèi)邊距 + 元素寬高
    即可以獲取行內(nèi)設(shè)置的寬高也可以獲取CSS設(shè)置的寬高
    只支持獲取, 不支持設(shè)置
    高級(jí)低級(jí)瀏覽器都支持
let oDiv = document.querySelector("div");
console.log(oDiv.offsetWidth );//獲取寬
console.log(oDiv.offsetHeight);//獲取高

總結(jié)

  1. 通過(guò) offsetWidth 和 offsetHeight 獲取的寬高包含 邊框 + 內(nèi)邊距 + 元素寬高
    通過(guò)getComputedStyle(); / currentStyle / style 獲取的寬高不包括邊框和內(nèi)邊距
  2. 通過(guò) offsetWidth 和 offsetHeight / getComputedStyle(); / currentStyle 既可以獲取行內(nèi)寬高堂污,也可以獲取CSS設(shè)置的寬高
    通過(guò)style 可以獲取行內(nèi)寬高家肯,但不可以獲取CSS設(shè)置的寬高
  3. 高級(jí)瀏覽器 getComputedStyle(); 低級(jí)瀏覽器 通過(guò)currentStyle獲取 高低級(jí)都支持:通過(guò)style獲取 / offsetWidth 和 offsetHeight
  4. style可以獲取也可以設(shè)置 其他的只能獲取
  5. style只能獲取行內(nèi)樣式, 別的可以獲取行內(nèi)和外鏈內(nèi)聯(lián)樣式

三大家族

  • offset家族
    offsetWidth / offsetHeight : 獲取的寬高包含 邊框 + 內(nèi)邊距 + 元素寬高
    offsetParent : 獲取元素的第一個(gè)定位祖先元素 盟猖,如果沒(méi)有定位的則獲取到的是body
    offsetLeft /offsetTop :獲取元素到第一個(gè)定位元素的偏移量讨衣,如果沒(méi)有定位的則獲取到的是到body的偏移量
  • client家族
    clientWidth / clientHeight : 獲取的寬高包含內(nèi)邊距 + 元素寬高
    clientLeft /clientHeight : 獲取 元素的 左邊框 或者 頂部邊框
  • scroll家族
    scrollWidth / scrollHeight :當(dāng)內(nèi)容沒(méi)超出元素范圍時(shí) 獲取的是 內(nèi)邊框 + 元素寬高
    當(dāng)內(nèi)容超出元素范圍時(shí) 獲取的是 內(nèi)邊框 + 元素寬高+超出的寬度
    scrollTop / scrollLeft :Top獲取的是內(nèi)容超出頂部?jī)?nèi)邊距的距離 Left獲取的是內(nèi)容超出左邊內(nèi)邊距的距離

獲取網(wǎng)頁(yè)寬高

let {width, height} = getScreen(); //解構(gòu)拿到寬高
    console.log(width);  //打印網(wǎng)頁(yè)寬高
    console.log(height);

    function getScreen() {//獲取網(wǎng)頁(yè)寬高的兼容性方法
        let width, height;
        if(window.innerWidth){
            width = window.innerWidth;
            height = window.innerHeight;
        }else if(document.compatMode === "BackCompat"){
            width = document.body.clientWidth;
            height = document.body.clientHeight;
        }else{
            width = document.documentElement.clientWidth;
            height = document.documentElement.clientHeight;
        }
        return {
            width: width,
            height: height
        }
    }

innerWidth/innerHeight只能在IE9以及IE9以上的瀏覽器中才能獲取
documentElement.clientWidth/documentElement.clientHeight可以用于在IE9以下的瀏覽器的標(biāo)準(zhǔn)模式中獲取
在混雜模式中利用document.body.clientWidth/document.body.clientHeight獲取可視區(qū)域的寬高

獲取網(wǎng)頁(yè)滾動(dòng)距離

let {x, y} = getPageScroll();
         function getPageScroll() {
            let x, y;
            if(window.pageXOffset){
                x = window.pageXOffset;
                y = window.pageYOffset;
            }else if(document.compatMode === "BackCompat"){
                x = document.body.scrollLeft;
                y = document.body.scrollTop;
            }else{
                x = document.documentElement.scrollLeft;
                y = document.documentElement.scrollTop;
            }
            return {
                x: x,
                y: y
            }
        }

window.pageXOffset;用于IE9及以上獲取
document.body.scrollLeft;用于IE9以下的混雜模式獲取
document.documentElement.scrollLeft;用于IE9以下的標(biāo)準(zhǔn)模式獲取

監(jiān)聽(tīng)網(wǎng)頁(yè)可視區(qū)域的變化

window.onresize = function () {
        resetSize();
        console.log("尺寸的變化");
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市式镐,隨后出現(xiàn)的幾起案子反镇,更是在濱河造成了極大的恐慌,老刑警劉巖娘汞,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歹茶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡你弦,警方通過(guò)查閱死者的電腦和手機(jī)惊豺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)禽作,“玉大人尸昧,你說(shuō)我怎么就攤上這事】醭ィ” “怎么了烹俗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)萍程。 經(jīng)常有香客問(wèn)我幢妄,道長(zhǎng),這世上最難降的妖魔是什么尘喝? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任磁浇,我火速辦了婚禮斋陪,結(jié)果婚禮上朽褪,老公的妹妹穿的比我還像新娘置吓。我一直安慰自己,他們只是感情好缔赠,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布衍锚。 她就那樣靜靜地躺著,像睡著了一般嗤堰。 火紅的嫁衣襯著肌膚如雪戴质。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天踢匣,我揣著相機(jī)與錄音告匠,去河邊找鬼。 笑死离唬,一個(gè)胖子當(dāng)著我的面吹牛后专,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播输莺,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼戚哎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嫂用?” 一聲冷哼從身側(cè)響起型凳,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘱函,沒(méi)想到半個(gè)月后甘畅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡往弓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年橄浓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亮航。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荸实,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缴淋,到底是詐尸還是另有隱情准给,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布重抖,位于F島的核電站露氮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钟沛。R本人自食惡果不足惜畔规,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恨统。 院中可真熱鬧叁扫,春花似錦三妈、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至对室,卻和暖如春模燥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背掩宜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蔫骂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牺汤。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓纠吴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親慧瘤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戴已,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • 什么是BOM DOM就是一套操作HTML標(biāo)簽的API(接口/方法/屬性) BOM就是一套操作瀏覽器的API(接口/...
    七分之二十四閱讀 321評(píng)論 0 1
  • BOM 什么是BOM?DOM就是一套操作HTML標(biāo)簽的API(接口/方法/屬性)BOM就是一套操作瀏覽器的API(...
    喝酸奶要舔蓋__閱讀 218評(píng)論 0 0
  • title: javascript(BOM常用方法)date: 2017-06-01 17:29:52tags: ...
    Gary23閱讀 605評(píng)論 0 0
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,759評(píng)論 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5锅减? 答:HTML5是最新的HTML標(biāo)準(zhǔn)糖儡。 注意:講述HT...
    kismetajun閱讀 27,518評(píng)論 1 45