检测元素是否进入或者退出视口。
-
可选择基于屏幕或者元素来判断是否进入视口,例如进入滚动容器
30%
后,或者元素出现30%
后 -
输入方式多样化,可以输入数字
200
,字符串30%
,小数0.3
-
可选择
autoDestory
模式,进入一次视口后,移除监听,销毁对象 -
横向纵向滚动判断
-
基于自定义容器的滚动,默认为
window
-
元素高度自定义,可选择:
- 包括
margin, border, padding
- 包括
border, padding
,不包括margin
- 包括
padding
,不包括margin,border
- 纯粹的高度,不包括
margin, border, padding
- 包括
暂无
- 安装
npm install viewport-check
- 使用
import ViewportCheck from 'viewport-check'
new ViewportCheck({
element:document.getElementById("target"),
offset:0.3,
baseAt:'target',
margin:true,
enter:(direction) => {
console.log('enter, the height include margin, border and padding! The enter direction is:'+direction)
},
leave:() => {
console.log('leave,The leave direction is:'+direction)
}
})
Attr | Description | Default value | Type | Required |
---|---|---|---|---|
element | 需要监控的元素 | / | HTMLElement[String] | true |
context | 滚动容器元素 | window | HTMLElement[String] | false |
offset | 进出视口的偏移量 | 0.3 | Number[String] | false |
baseAt | 偏移量基于元素还是滚动容器 | target | (target/context) | false |
padding | 高度计算是否包括padding更多 | true | Boolean | false |
border | 高度计算是否包括border更多 | true | Boolean | false |
margin | 高度计算是否包括margin更多 | false | Boolean | false |
useCssComputed | 是否使用css 的高度设置更多 |
false | Boolean | false |
autoDestroy | 是否在进入视口后销毁 | false | Boolean | false |
horizontal | 是否横向滚动 | false | Boolean | false |
enter | 进入视口的回调函数 | (direction)=>{} | Function | false |
leave | 离开视口的回调函数 | (direction)=>{} | Function | false |
默认情况下使用getBoundingClientRect
计算元素高度,但是当元素初始为scale(0)
的情况,无法准确获取的高度,
因此需要使用getComputedStyle
计算高度。
在css的盒模型中,最外层的是margin
,接着是border
,接着是padding
和height
。
在ViewportCheck
中,默认是margin:false
,border:true
, padding:true
;这么做遵循了element.offsetHeight
的配置。
因此,如果设定了margin:true
,也就意味着包括margin
,同样也包括了border
和padding
。
如果只想计算最纯粹的height
,那么需要设定border:false
, padding:false
, 因为margin
默认为false
。