JavaScript获取可视区页面内容浏览器宽高滚动高度

42次阅读

共计 3530 个字符,预计需要花费 9 分钟才能阅读完成。

一、window 对象

1.1 窗口左上角在屏幕上的 x 坐标 和 y 坐标(只读)

screenLeft||screenX
screenTop||screenY

兼容性
IE、Safari 和 Opera 支持 ScreenLeft/ScreenTop
Firefox、Safari 支持 ScreenX/ScreenY
Chrome 都支持

1.2 文档区宽高(只读)

文档区宽高(不含工具栏、控制台等,只是网页显示区域的宽高)

innerWidth||document.documentElement.clientWidth||document.body.clientWidth
innerHeight||document.documentElement.clientHeight||document.body.clientHeight

innerWidth 是非 IE 写法,document 是 IE 写法

1.3 整个浏览器窗口的宽高(只读)outerWidth、outerHeight

不支持 IE,IE 没有获取整个浏览器窗口的宽高的方法

1.4 pageXOffset、pageYOffset

设置或读取当前页面相对于窗口显示区左上角的 X/Y 位置

二、event 对象(事件对象)

在触发 DOM 上的某个事件时,会产生一个事件对象 event,这个对象中包含着所有与事件有关的信息。所有浏览器都支持 event 对象,但支持的方式不同。

普通浏览器支持 event
ie 678 支持 window.event

所以如果需要兼容旧版浏览器的话,可以采取兼容性的写法

var event = event || window.event;

2.1 event.screenX event.screenY

返回事件发生时,鼠标指针相对于显示器屏幕的左上角水平/垂直坐标

<body>
<div id="box"></div>

<script>
    var box = document.getElementById('box');
    box.addEventListener('click',function(event){
        var screenX = event.screenX;
        var screenY = event.screenY;
        alert('指针相对于屏幕显示器左上角的 X 坐标是:'+screenX+',指针相对于屏幕显示器左上角的 Y 坐标是:'+screenY);
    })
</script>

2.2 event.clientX event.clientY

返回事件发生时,鼠标指针相对于浏览器窗口可视区域的水平/垂直窗口坐标。

可视区域不包括工具栏和滚动条,IE 事件和 w3c 标准事件都定义了这 2 个属性

<div id="box"></div>

<script>
    var box = document.getElementById('box');
    box.addEventListener('click',function(event){
        var clientX = event.clientX;
        var clientY = event.clientY;
        alert('指针相对于文档可视区的 X 坐标是:'+clientX+',指针相对于文档可视区的 Y 坐标是:'+clientY);
    })
</script>

2.3 event.offsetX event.offsetY(仅 IE)

返回鼠标指针的位置,相对于事件源元素的水平(垂直坐标)

<body>
<div id="box"></div>

<script>
    var box = document.getElementById('box');
    box.addEventListener('click',function(event){
        var offsetX = event.offsetX;
        var offsetY = event.offsetY;
        alert('指针相对于 box 的 X 坐标是:'+offsetX+',指针相对于 box 的 Y 坐标是:'+offsetY);
    })

</script>

2.4 event.pageX event.pageY(不支持 IE)

返回鼠标指针的位置,类似于 event.clientX、event.clientY,但它们使用的是文档坐标而非窗口坐标。

三、document 对象

3.1 文档区宽高:clientWidth/clientHeight

示例图见 1.2 小节

document.documentElement.clientWidth || document.body.clientWidth
document.documentElement.clientHeight || document.body.clientHeight

3.2 html(body) 的总宽高:offsetWidth/offsetHeight

document.documentElement.offsetWidth || document.body.offsetWidth
document.documentElement.offsetHeight || document.body.offsetHeight

获取某个元素的总宽高,也可以使用 offsetWidth/offsetHeight 方法。

3.3 滚动高度(滚动条滚过的长度)

document.documentElement.scrollTop || document.body.scrollTop

四、DOM 对象(元素)的 offset 家族

4.1 计算元素宽高:offsetWidth、offsetHeight

offsetWidth 计算方法如下:

offsetWidth = width + border + padding

4.2 获取位置 offsetLeft 和 offsetTop

返回距离上级盒子(最近的带有定位)左边的位置。

如果父级都没有定位则以 body 为准。

offsetLeft 从父级的 padding 开始算 父亲的 border 不算,即:就是子盒子到定位的父盒子边框到边框的距离。

4.3 获取带有定位的父级元素 offsetParent

offsetParent 返回该对象的父级(带有定位)

4.4 offsetParent 和 parentNode 的区别:

如果当前元素的父级元素没有进行 CSS 定位(position 为 absolute 或 relative),offsetParent 为 body。

如果当前元素的父级元素中有 CSS 定位(position 为 absolute 或 relative),offsetParent 取最近的那个父级元素。

4.5 offsetTop 和 style.top 的区别

  1. 最大区别在于 offsetLeft 可以返回没有定位盒子的距离左侧的位置。而 style.top 不可以 只有定位的盒子 才有 left top right
  2. offsetTop 返回的是数字,而 style.top 返回的是字符串,除了数字外还带有单位:px。
  3. offsetTop 只读,而 style.top 可读写。
  4. 如果没有给 HTML 元素指定过 top 样式,则 style.top 返回的是空字符串。
  5. 最重要的区别 style.left 只能得到 行内样式 offsetLeft 随便

4.6 附:获取行内样式的宽高 ele.style.width/height

div.style.width 只能获取到行内样式,无法获取 css 样式表里面的样式。

五、Window 对象方法

5.1 moveBy()

语法:window.moveBy(x,y)

相对窗口当前的坐标,把它移动到指定的像素

x:要把窗口右移的像素

y: 要把窗口下移的像素

5.2 moveTo()

语法:window.moveTo(x,y)

把窗口的左上角移动到一个指定的坐标

x:窗口新位置的 x 坐标

y: 窗口新位置的 y 坐标

提示:出于安全方面的原因,浏览器限制此方法使其不能把窗口移出屏幕。

5.3 resizeBy()

语法:resizeBy(width, height)

根据指定的像素来调整窗口的大小

width:必需,要使窗口宽度增加的像素数。可以是正、负数值

height:可选,要使窗口高度增加的像素数。可以是正、负数值

5.4 resizeTo()

语法:resizeTo(width, height)

把窗口的大小调整为指定的宽度和高度

width:必需,想要调整到的窗口的宽度。以像素计

height:可选,想要调整到的窗口的高度。以像素计

5.5 scrollBy()

语法:scrollBy(xnum, ynum)

把内容滚动指定的像素数

xnum:必需,把文档向右滚动的像素数

ynum:必需,把文档向下滚动的像素数

5.6 scrollTo()

语法:scrollTo(xpos, ypos)

把内容滚动到指定的坐标

xpos:必需,要在窗口文档显示区左上角显示的文档的 x 坐标

ypos:必需,要在窗口文档显示区左上角显示的文档的 y 坐标

正文完
 0