窗口寬高和座標

firefox,google,ie7~Edge

一、3種方法能夠確定瀏覽器窗口的尺寸

方法1(ie8及其以下undefined)

不受滾動條影響
console.log( window.innerHeight )//- 瀏覽器窗口的內部高度 //662(由於打開了控制檯)
console.log( window.innerWidth )//- 瀏覽器窗口的內部寬度  //1920(有無滾動條都不變)

// 
window.screen.height  // 都支持

方法2

// 只獲取當前可見的寬受滾動影響 高不受影響。
console.log( document.documentElement.clientHeight ) 
console.log( document.documentElement.clientWidth )  //(滾動條1903)

方法3:

    //獲取的是body的寬高,會拋去自帶的8px的margin,(設置高爲2000px則爲2000px)
    document.body.clientHeight  // 0
    document.body.clientWidth    //1920(滾動條1903)

2、綜合測試

        //前提:body的高度設置爲2000px,做如下測試(控制檯會導致高度改變)
            var h = window.innerHeight
            var _h = document.documentElement.clientHeight
            var _hh = document.body.clientHeight
            var w = window.innerWidth
            var _w = document.documentElement.clientWidth
            var _ww = document.body.clientWidth
            console.log( h )   
            console.log( _h )  
            console.log( _hh )  
            console.log( w )    
            console.log( _w )   
            console.log( _ww ) 

在ie下能正常運行,兼容寫法:

    var w=window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    var h=window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;

二、其他視口和位置偏移

1、屏幕大小

            //獲取屏幕大小,屏幕寬、高多少就是多少
            var w = screen.availWidth
            var h = screen.availHeight
            console.log( h )  // 1040
            console.log( w )  //1920

2、offsetHeight & offsetWidth

// 獲取寬度,高度,包括padding和border。
// 獲取body
document.body.offsetWidth();
// 獲取元素
var ele = document.getElementById('test');
ele.offsetHeight()

3、offsetTop& offsetLeft & offsetParent;

獲取對象相對於版面或相對於父元素的(父元素需設置定位)左側位置

除了IE7獲得的是到body的距離。其他均爲到面板的距離。

// 如果父元素沒設置定位,則結果都是body,如果有定位則輸出父元素。
var ele = document.getElementById('test');
console.log(ele.offsetParent);

4、scrollTop & scrollLeft

受到”<!DOCTYPE html>“的影響,下面都是在聲明下測試 , scrollTop的開始計算是從可視區域的最下邊開始的。

    // google支持document.body;
    console.log(document.body.scrollTop);

    // firefox IE 支持document.documentElement
    console.log(document.documentElement.scrollTop);

兼容性寫法:var top = document.body.scrollTop || document.documentElement.scrollTop;

5、scrollWidth & scrollHeight

// 類似document.body;IE和firefox不算body的8px的margin;google計算
document.body.scrollHeight;

// 都會計算body的8px的margin
document.documentElement.scrollHeight

三、位置獲取

1、e.clientX & e.clientY

IE9+ 和firefox 和google有效。相對文檔的水平座標 ,相對文檔的垂直座標 不受滾動影響。IE7和8需要正確指定event(window.event)。


var ele = document.getElementById('test');
ele.onclick = function(e) {
    console.log(e.clientX);
    console.log(e.clientY);
}

2、e.pageX & e.pageY

google 和firefox 可以直接獲得滾動的座標。

var ele = document.getElementById('test');
ele.onclick = function(e) {
    console.log(e.pageX);
    console.log(e.pageY);
}
// IE8和以下用下邊的方式。
    var pageX = e.pageX,
        pageY = e.pageY;

    if(pageX === undefined) {
        pageX = e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
    }

    if(pageY === undefined) {
        pageY = e.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
    }

3、e.screenX & e.screenY

IE7 & 8需要正確指定event。
    console.log(e.screenY);

IE7 & 8需要正確指定event。

4、e.offsetX & e.offsetY

相對於父元素的偏移量。

附圖片:來自於網絡
這裏寫圖片描述

2016.8.22

2017.02.08二次編輯

發佈了42 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章