v-poppers
v1.2.0
Published
Popper floating pop up library
Readme
popper
Chinse Version
给定一个元素(比如一个按钮)和一个描述它的工具提示元素,Popper会自动将弹框提示放在元素附近的正确位置。
它将定位从文档流中“弹出”并浮动在目标元素附近的任何UI元素。最常见的例子是工具提示,但它也包括弹出窗口、下拉菜单等。所有这些都可以泛称为“popper”元素。
npmUrl
https://www.npmjs.com/package/v-poppers
为什么使用Popper库?
在任何数量的滚动容器中滚动时, 确保与被跟踪元素保持在一起
无需手动设置CSS, Popper会自动设置到相应的位置
灵活配置弹出位置, 大大减少了开发生产力
安装
# Using npm
npm i v-poppers -S
# Using yarn
yarn add v-poppers
通过script标签引入
<script src="*/index.umd.min.js"></script>
以Vue项目为例, 当然你可以在你的任何项目中使用
使用
<div class="popper" ref="popper"></div>
<div class="target" ref="target"></div>
<script>
import Popper from 'v-poppers'
export default {
data() {
return {
s: null,
}
},
mounted() {
this.s = new Popper(this.$refs.popper, this.$refs.target)
this.s.show()
}
}
</script>
new Popper(el, trackNode, options)
|属性| 类型| 说明| 默认值| | ----- | ----- | ------| ------| |el(必传) | HTMLElement | popper 元素节点| null| |trackNode(必传) | HTMLElement | popper 要跟踪的元素节点| null| |options(可选) | object | 配置选项| {}|
当 new 的时候, Popper会初始化配置, 你必须使用show()方法, 来使Popper到达指定的位置。
Popper 默认采用绝对定位, 当然你可以通过下面的配置来修改它
Popper默认会将 popper 元素自动添加到 body 上, 计算默认也将是以body为基准, 如果需要加入到 popper 元素的父级上, 请看下面的配置选项。
传入配置
可以通过传入配置来使Popper更灵活
<div ref="wrap">
<div class="popper" ref="popper"></div>
<div class="target" ref="target"></div>
</div>
<button @click="update">改变配置</button>
<script>
import Popper from 'v-poppers'
export default {
data() {
return {
s: null,
options: {
position: 'absolute',
trackPosition: 'bottom-start',
offset: {
y: 0
},
exceed: {
y: 30,
x: 30
},
appendParentNode: null,
className: {
top: ['top-class']
},
styles: {
color: 'red'
}
}
}
},
mounted() {
this.options.appendParentNode = this.$refs.wrap
this.s = new Popper(this.$refs.popper, this.$refs.target, this.options)
this.s.show()
},
beforeDestroy() {
this.s.destroy()
},
methods: {
update() {
this.options.offset.y = 20
this.s.setOptions(this.options).update()
}
}
}
</script>
配置属性
|名称| 类型| 说明| 可选值| 默认值| |----|-----|-----|----|-----| |position|string|popper元素定位方式| css可用的定位值| absolute| |trackPosition|string|popper元素所有跟踪的位置| 见表格下文| bottom-start| |offset|object|popper元素偏移量| 任何有用数值| {x: 0, y: 0}| |exceed|object|popper元素被隐藏多少开始计算位置| 任何有用数值| {x: 0, y: 0}| |appendParentNode|HTMLElement|popper元素所需要被追加到的父元素, 不传会被默认加载body上| DOM | null | |isAppendParentNode|boolean|如果不明确父级元素, 可指定此属性为true, 会将popper追加到里被跟踪元素最近的一个滚动父级容器上| -- | false | |className|object|popper元素所在相对于跟踪元素节点位置的class样式| 见表格下文 | -- | |styles|object|popper元素 的styles样式| 任何可用的style样式 | {} |
trackPosition 的可能值: bottom-start | bottom-center | bottom-end | top-start | top-center | top-end | left-center | right-center
className 的可能值: top | bottom | left | right |
Popper 方法
| 名称 | 说明 | 参数| 返回值 | | --- | ----| ----| ----- | | show | 显示Popper元素, 只有调用此方法,才开始计算位置| -- | 当前 Popper 实例 | |update | 更新Popper元素, 调用此方法, 会重新开始计算 | -- | 当前 Popper 实例 | |setOptions | 更新配置选项, 当重新更新了配置后, 调用此方法重新设置 | options | 当前 Popper 实例 | |destroy | 销毁当前Popper实例 | --- | ---- |
当不需要使用popper元素的时候, 应该要手动去销毁它
