element-sticky
Version:
实现类似position:sticky效果,支持top,bottom
90 lines (80 loc) • 2.43 kB
Markdown
# element-sticky
实现类似position:sticky效果,支持top,bottom
## 用法
```js
npm install element-sticky
```
## 构造函数
ElementSticky(el: string|HTMLElement, options: object)
+ el
- type: string|HTMLElement
- 要sticky的元素,支持元素选择器
+ options
- type: object
+ options.scroller
- type: string|HTMLElement
- 手动指定滚动容器,默认自动查找最近的父级滚动容器
+ options.OBSAVTTFS
- type: number|{height: number, width: number}
- 当滚动容器和视图的宽度或高度误差在此范围内,自动启用fixed布局
+ options.position
- type: 'absolute'|'fixed'
- default: null
- 没有指定position则自动智能判断,只能传absolute和fixed。使用absolute时请预先将scroller样式置为定位样式
+ options.top
- type: string|number
- defautl: 0
- 不支持百分比,不能和bottom同时设置
+ options.bottom
- type: string|number
- 不支持百分比,不能和top同时设置
+ options.style
- type: object
- default: { zIndex: 9 }
- sticky时的额外样式
+ options.triggerFunc
- type: TriggerCallback
- default: defaultTriggerFunc
- 触发sticky的条件函数
+ options.delayInit
- type: number
- default: 0
- 延时初始化,某些情况可以保证获取到正确的样式。毫秒数
+ options.afterInited
- type: (ctx: ElementSticky) => any
- default: null
- init方法执行后的回调
+ options.observeThreshold
- type: number|number[]
- default: 1
- Intersection Observer API的threshold参数
+ options.observeRootMargin
- type: string
- default: '0px'
- Intersection Observer API的rootMargin参数
+ optins.polyfill
- type: boolean
- default: false
- 否强制初始化,否则只对不原生支持sticky的环境执行初始化
+ options.debug
- type: boolean
- default: false
- 是否打印调试信息
</br>
+ @callback: TriggerCallback
- @param: {IntersectionObserverEntry[]} entries
- @param {ElementSticky} ctx
- @returns {boolean}
</br>
## 实例方法
+ init
- 初始化
+ initObserver
- 初始化观察器
+ unobserve
- 解除InterSectionObserver观察,解除sticky
+ destroy
- 销毁
项目基于InterSectionObserver API和ResizeObserver API实现,目前这两个API的polyfill还是会有些莫名的问题
### 建议使用场景
全局滚动容器下需要top和bottom粘性布局,这时使用的是fixed布局