# dom
**DOM 视口与元素操作**
【环境】视口测量(getWin 系列/getElementOffset)依赖浏览器 window/document,SSR/Node 中调用会抛错【引入不受影响】
【兼容】滚动偏移优先 pageYOffset、内容尺寸优先 documentElement,取不到再逐级兜底到 body
```JavaScript
import { dom } from 'jun-utils';
```
## getWinHeight()
**获取窗口可视区的高度**
innerHeight 口径含滚动条,回退的 clientHeight 口径不含【桌面端有可见滚动条时两者有差】
```JavaScript
dom.getWinHeight(); // 可视区高度【像素,随窗口大小变化】
// => 667
```
## getWinWidth()
**获取窗口可视区的宽度**
```JavaScript
dom.getWinWidth(); // 可视区宽度【像素,随窗口大小变化】
// => 375
```
## getWinScrollHeight()
**获取窗口可视区内容的总高度**
```JavaScript
dom.getWinScrollHeight(); // 内容总高度,长页面大于可视区高度
// => 2589
```
## getWinScrollWidth()
**获取窗口可视区内容的总宽度**
```JavaScript
dom.getWinScrollWidth(); // 内容总宽度,无横向溢出时等于可视区宽度
// => 375
```
## getWinScrollTop()
**获取窗口可视区滚动条垂直偏移**
```JavaScript
dom.getWinScrollTop(); // 页面未滚动时
// => 0
dom.getWinScrollTop(); // 向下滚动 100px 后
// => 100
```
## getWinScrollLeft()
**获取窗口可视区滚动条水平偏移**
```JavaScript
dom.getWinScrollLeft(); // 页面未滚动时
// => 0
```
## getElementOffset(element)
**获取元素相对于文档的位置**
相对整份文档的坐标【getBoundingClientRect 是相对视口,不含页面滚动偏移】
element 为空值或无 getBoundingClientRect 时返回 { top: 0, left: 0 }
返回的是视觉坐标:display:none 元素 rect 全 0,叠加滚动偏移后可能得到非 0;
position:fixed / transform 元素的坐标随变换与滚动变化,可能与布局位置不符
```JavaScript
const offset = dom.getElementOffset(element);
const left = offset.left;
const top = offset.top;
```
## getStyle(element, name)
**获取元素样式**
currentStyle:IE、Opera(返回未经计算的相对值,如 50%、1em、auto)
getComputedStyle:FireFox、Chrome、Safari
```JavaScript
dom.getStyle(element, 'font-size'); // 读最终样式【含内联、嵌入、外部样式】
// => '14px'
dom.getStyle(element, 'fontSize'); // 驼峰入参,与连字符等价
```
## selectText(input, [start=0], [length])
**选中文本**
仅支持 input、textarea;type=number 等无可选文本的 input 类型会抛 InvalidStateError
```JavaScript
鼠标停留在‘元’前面
dom.selectText(document.querySelector('input'), 2, 0);
选中所有
dom.selectText(document.querySelector('input'));
```
---
[← 返回 API 索引](../../README.md#api)