窗口宽高和坐标

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二次编辑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值