用javascript 怎样才能很好的获取手机的屏幕宽度和高度

JavaScript019

用javascript 怎样才能很好的获取手机的屏幕宽度和高度,第1张

一般来说在移动浏览器上是拿不到屏幕真实分辨率的,因为页面渲染是在一个叫viewport的页面绘制区域内(说的通俗点就是手机浏览器是用一个虚拟的屏幕来显示网页的)。viewport和屏幕的真实尺寸并不是对应的,如在Safari Mobile中viewport默认宽度(320px)是屏幕真实尺寸(640px)的一半,这里不管是用window.innerHeight还是window.screen.width拿到的都是320px。当然我们可以通过meta设置改变viewport的比例,如initial-scale=.5就可以让viewport和屏幕一致的尺寸,但这个比例在不同的手机上并不一定是2倍关系,特别是Android手机,在大屏手机(5寸以上)上这个值是3倍甚至4倍。而且改变viewport比例后可能会导致后续制作中出现一系列问题。所以我认为不要纠结一定要拿到屏幕真实尺寸,就把viewport的尺寸当成屏幕的尺寸进行页面设计和制作肯定是没有问题的。

有一个非常曲线的解决办法,就是:css的媒体查询(@media)是能够检测屏幕尺寸(其实是浏览器窗体的真实尺寸,并不是屏幕的真实物理尺寸,介意的朋友就不要看了)的,通过它来给网页内的某个元素设置一个特殊的属性,然后再用JavaScript来获取这个属性值。当然这样只能获得一个阶梯值(比如480px到540px之间、540px到600px之间等等),不是精确值,所以可能得不偿失,因此我是不推荐的。

IE中: 

document.body.clientWidth ==>BODY对象宽度 

document.body.clientHeight ==>BODY对象高度 

document.documentElement.clientWidth ==>可见区域宽度 

document.documentElement.clientHeight ==>可见区域高度

FireFox中: 

document.body.clientWidth ==>BODY对象宽度 

document.body.clientHeight ==>BODY对象高度 

document.documentElement.clientWidth ==>可见区域宽度 

document.documentElement.clientHeight ==>可见区域高度

Opera中: 

document.body.clientWidth ==>可见区域宽度 

document.body.clientHeight ==>可见区域高度 

document.documentElement.clientWidth ==>页面对象宽度(即BODY对象宽度加上Margin宽) 

document.documentElement.clientHeight ==>页面对象高度(即BODY对象高度加上Margin高) 

没有定义W3C的标准,则 

IE为: 

document.documentElement.clientWidth ==>0 

document.documentElement.clientHeight ==>0 

FireFox为: 

document.documentElement.clientWidth ==>页面对象宽度(即BODY对象宽度加上Margin宽) 

document.documentElement.clientHeight ==>页面对象高度(即BODY对象高度加上Margin高) 

Opera为: 

document.documentElement.clientWidth ==>页面对象宽度(即BODY对象宽度加上Margin宽) 

document.documentElement.clientHeight ==>页面对象高度(即BODY对象高度加上Margin高) 

网页可见区域宽: document.body.clientWidth 

网页可见区域高: document.body.clientHeight 

网页可见区域宽: document.body.offsetWidth (包括边线的宽) 

网页可见区域高: document.body.offsetHeight (包括边线的高) 

网页正文全文宽: document.body.scrollWidth 

网页正文全文高: document.body.scrollHeight 

网页被卷去的高: document.body.scrollTop 

网页被卷去的左: document.body.scrollLeft 

网页正文部分上: window.screenTop 

网页正文部分左: window.screenLeft 

屏幕分辨率的高: window.screen.height 

屏幕分辨率的宽: window.screen.width 

屏幕可用工作区高度: window.screen.availHeight 

屏幕可用工作区宽度: window.screen.availWidth 

HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth 

scrollHeight: 获取对象的滚动高度。 

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 

scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 

scrollWidth:获取对象的滚动宽度 

offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度 

offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 

offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置 

event.clientX 相对文档的水平座标 

event.clientY 相对文档的垂直座标 

event.offsetX 相对容器的水平坐标 

event.offsetY 相对容器的垂直坐标 

document.documentElement.scrollTop 垂直方向滚动的值 

event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量

示例:

var winWidth = 0 

var winHeight = 0 

function findDimensions() //函数:获取尺寸 

    //获取窗口宽度 

    if (window.innerWidth) 

        winWidth = window.innerWidth 

    else if ((document.body) && (document.body.clientWidth)) 

        winWidth = document.body.clientWidth 

    //获取窗口高度 

    if (window.innerHeight) 

        winHeight = window.innerHeight 

    else if ((document.body) && (document.body.clientHeight)) 

        winHeight = document.body.clientHeight 

    //通过深入Document内部对body进行检测,获取窗口大小 

    if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) 

    { 

        winHeight = document.documentElement.clientHeight 

        winWidth = document.documentElement.clientWidth 

    } 

    //结果输出至两个文本框 

    document.form1.availHeight.value= winHeight 

    document.form1.availWidth.value= winWidth 

findDimensions() 

//调用函数,获取数值 

window.onresize=findDimensions