Vue 2.x 右键菜单组件
特性:
- 动态计算弹出框位置
- 边缘检测,保证弹出框边缘不会超出视区
- 单个弹出框可以匹配多个触发元素(多个元素写在同一模板下)
<script src="//cdn.jsdelivr.net/gh/beyoursun/vue-popup/dist/vue-popup.js"></script>
npm install @xunlei/vue-popup --save
首选,你需要注册插件。
import Vue from 'vue'
import VuePopup from '@xunlei/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
特性用来配置弹出框是否可见。
这是一个简单的在线示例。
属性名 | 描述 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
append-to-body | 是否放到 body 下 | Boolean | - | true |
arrow-class | 箭头的类 | String | - | - |
direction | 弹出框方向 | String | top / topStart / topEnd / right / rightStart / rightEnd / bottom / bottomStart / bottomEnd / left / leftStart / leftEnd | bottom |
display (.sync) | 是否可见 | Boolean | - | false |
padding | 弹出框与触发元素的间距 | Number | - | 0 |
trigger | 触发弹出框的事件类型 | String | hover / focus / click | hover |
scroll-show | 页面滚动时弹出框是否可见 | Boolean | - | true |
事件名 | 描述 | 回调参数 |
---|---|---|
show | 弹出框展示事件 | value |
hide | 弹出框隐藏事件 | value |
-
描述: 指令需要添加在触发弹出框的元素上。
-
参数:
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>
弹出框组件只会添加必要的样式和类,如 top, left...具体的样式需要用户给出。
弹出框在改变方向时,会分别为弹出框的根元素添加以下四个类,用以匹配不同方向的样式。
- 弹出框在触发元素上方时:popup-top
- 弹出框在触发元素下方时:popup-bottom
- 弹出框在触发元素左边时:popup-left
- 弹出框在触发元素右边时:popup-right
# 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
MIT