/vue-popup

💬 a popup component for Vue.js

Primary LanguageVue

vue-popup

Travis GitHub tag

一个 Vue.js 弹出框组件,供迅雷内部使用。受到 Element Popover 的启发。

popup

特性:

  • 动态计算弹出框位置
  • 边缘检测,保证弹出框边缘不会超出视区
  • 单个弹出框可以匹配多个触发元素(多个元素写在同一模板下)

安装 Installation

CDN

<script src="//cdn.jsdelivr.net/gh/beyoursun/vue-popup/dist/vue-popup.js"></script>

NPM

npm install @xunlei/vue-popup --save

使用 Usage

首选,你需要注册插件。

import Vue from 'vue'
import VuePopup from 'vue-popup'

Vue.use(VuePopup)

在你的 .vue 文件中使用 popup 组件。

<template>
  <div>
    <popup ref="popup1" :display.sync="showPop">
      <h3>标题</h3>
      <p>这是一段内容。</p>
    </popup>
    <a v-popup:popup1 href="javascript:;">展示弹出框</a>
  </div>
</template>

<script>
export default {
  data () {
    return {
      showPop: false
    }
  }
}
</script>

在你的 popup 组件上添加 ref 引用,然后使用 v-popup 指令来将按钮映射到弹出框上。display 特性用来配置弹出框是否可见。

这是一个简单的在线示例

接口 API

属性 Prop

属性名 描述 类型 可选值 默认值
append-to-body 是否放到 body 下 Boolean - true
arrow-class 箭头的类 String - -
direction 弹出框方向 String top/right/bottom/left bottom
display (.sync) 是否可见 Boolean - false
padding 弹出框与触发元素的间距 Number - 0
trigger 触发弹出框的事件类型 String hover/focus/click hover
scroll-show 页面滚动时弹出框是否可见 Boolean - true

事件 Event

事件名 描述 回调参数
show 弹出框展示事件 value
hide 弹出框隐藏事件 value

指令 Directive

v-popup

  • 描述: 指令需要添加在触发弹出框的元素上。

  • 参数:

    • popupRef (required) - 用于匹配特定弹出框。
  • 类型:

    • any (optional) - 在触发事件时传入的回调参数。
  • 示例:

<popup
  ref="popup1"
  :display.sync="showPop"
  @show="handleShow"
  @hide="handleHide">
</popup>
<a v-popup:popup1="val"></a>

<scirpt>
export default {
  ...
  methods: {
    handleShow (val) { },
    handleHide (val) { }
  }
}
</script>

样式 Style

弹出框组件只会添加必要的样式和类,如 top, left...具体的样式需要用户给出。

弹出框在改变方向时,会分别为弹出框的根元素添加以下四个类,用以匹配不同方向的样式。

  • 弹出框在触发元素上方时:popup-top
  • 弹出框在触发元素下方时:popup-bottom
  • 弹出框在触发元素左边时:popup-left
  • 弹出框在触发元素右边时:popup-right

构建流程 Build Setup

# clone the project repo
git clone https://github.com/beyoursun/vue-popup.git

# install dependencies
cd vue-popup && npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build

更新日志 ChangeLog

0.2.0 | 2017.6.11

  • 新增 弹出框边缘不会超出视区
  • 新增 滚动时对弹出框位置进行重新计算
  • 更新 使用 getBoundingClientRect 方法来获取元素位置
  • 新增 append-to-body 属性

0.2.1 | 2017.6.12

  • 新增 display 是否可见属性
  • 更新 README.md

0.3.0 | 2017.6.19

  • 新增 focus 触发方式
  • 更新 鼠标移除弹出框或触发元素时 延迟 100ms 消失
  • 更新 使用 style 绑定展示弹出框

0.3.2 | 2017.7.10

  • 新增 focus 触发方式
  • 支持列表新增触发元素

0.3.3 | 2017.7.11

  • 新增 页面滚动时弹出框是否可见配置

0.3.5 | 2017.7.17

  • 更新 指令解绑或组件销毁时解绑相关事件

License

MIT