v-poppers

Popper floating pop up library

Usage no npm install needed!

<script type="module">
  import vPoppers from 'https://cdn.skypack.dev/v-poppers';
</script>

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元素的时候, 应该要手动去销毁它