0.0.3 • Published 2 years ago

@clownjs/mouse-menu v0.0.3

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

Mouse Menu

Version Size

自定义菜单-VUE3组件/指令

特性

  1. 默认封装成Vue指令
  2. 支持自定义样式
  3. 支持子菜单
  4. 支持加入菜单图标
  5. 支持移动端长按唤出菜单(v1.7.0后支持)

配置

Props/指令Value (Object)

参数说明类型可选值默认值
el触发的Dom元素(以Vue组件方式或CustomMenu函数方式使用时必须传入)---
menuWidth菜单宽度Number-200
menuList生成菜单项的数组,具体配置参考下表Array--
hasIcon是否有菜单图标Boolean-false
iconType菜单图标的类型,支持字体图标、SVG图标、VNode组件'font-icon', 'svg-icon', 'vnode-icon'-font-icon
menuWrapperCss菜单容器的CSS设置,具体配置参考下表Object--
menuItemCss菜单项的CSS设置,具体配置参考下表Object--
params传给处理函数的自定义参数,会注入到下方各回调函数的首个参数中Any--
appendToBody容器是否挂载到body上Boolean-true
disabled是否禁用整个菜单,接收一个函数(params: any) => boolean--
useLongPressInMobile移动端下兼容使用长按事件唤出菜单, 但长按模式不支持多级菜单(仅支持指令方式)Boolean-false
longPressDuration长按事件需持续时间,单位msNumber-500
injectCloseListener自动注入关闭菜单的Listener,设为false时需自行处理Boolean-true
customClass注入自定义类名到MenuWrapper上String--

menuList-菜单项数组配置

参数说明类型可选值默认值
fn点击菜单后执行的回调,回调参数1为用户传入的Params, 参数2为点击右键时所在的HtmlElement元素(使用document.elementFromPoint获取), 参数3为指令绑定的当前元素, 参数4为原生点击事件数据Function--
label菜单名, 可使用函数,回调参数同fn选项String, Function--
tips菜单辅助文本(处于右侧的文本),可使用函数,回调参数同fn选项String, Function--
icon菜单图标的类名(字体图标)String--
hidden菜单项是否隐藏,可使用函数,回调参数同fn选项Boolean, Function--
disabled菜单项是否不可点击,可使用函数,回调参数同fn选项Boolean, Function--
children子菜单的菜单项数组(配置与此表一致,但目前仅支持二级菜单)Array--
line是否为分割线,该值为True时,以上设置均失效Boolean--
customClass注入自定义类名到MenuItem上String--

menuWrapperCss-菜单容器CSS设置

参数说明类型可选值默认值
background菜单容器背景色String-#c8f2f0
boxShadow菜单容器阴影String-0 1px 5px #888
padding默认paddingString-5px 0
borderRadius圆角String-4px
lineColor分割线颜色String-#ccc
lineMargin分割线MarginString-5px 0

menuItemCss-菜单项CSS设置

参数说明类型可选值默认值
height每项高度String-30px
padding-String-0 10px
iconSize图标大小String-20px
iconFontSize字体图标字体大小(设置类型为字体图标时可用)String-null
iconColor字体图标颜色String-#484852
labelColor菜单项标题颜色String-#484852
labelFontSize菜单项标题字体大小String-14px
tipsColor菜单辅助文字颜色String-#889
tipsFontSize菜单辅助文字字体大小String-12px
arrowColor指示箭头颜色(出现子菜单时生成)String-#484852
arrowSize指示箭头大小(指示箭头为使用border生成的三角形)String-10px
disabledColor菜单禁用状态时的颜色String-#bcc
hoverBackgroundhover时菜单项的背景色String-rgba(255,255,255,.8)
hoverLabelColorhover时菜单项label的颜色String-null
hoverTipsColorhover时菜单项tips的颜色String-null
hoverArrowColorhover时菜单项arrow的颜色String-null

以上涉及的CSS部分配置使用css3的css变量实现,若需兼容IE请自己定义样式表

Methods

方法名说明参数
show显示菜单,一般不需要自行调用x:number,y:number
close关闭菜单-

若以组件方式使用,需要使用上方的show/close方法自行处理鼠标右键菜单行为

使用

  1. 指令方式使用(推荐)
<template>
  <div v-mouse-menu="options">Dom</div>
</template>
<script>
import { MouseMenuDirective } from '@clownjs/mouse-menu';
export default {
  directive: {
    MouseMenu: MouseMenuDirective
  },
  setup() {
    return {
      options: {} // Some Options
    }
  }
}
</script>
  1. 函数方式使用
<template>
  <div ref="dom" @contextmenu="showMenu">Dom</div>
</template>
<script>
import { ref } from 'vue'
import { CustomMouseMenu } from '@clownjs/mouse-menu';
export default {
  setup() {
    const dom = ref()
    const showMenu = (e) => {
      e.preventDefault()
      const MouseMenuCtx = CustomMouseMenu({
        el: dom.value,
        // Other Options
      })
      const { x, y } = e;
      MouseMenuCtx.show(x,y);
    }
    return {
      dom,
      showMenu
    }
  }
}
  1. 组件方式使用
<template>
  <div ref="dom" @contextmenu="showMenu">Dom</div>
  <mouse-menu ref="mouseMenuEl" v-bind="options"></mouse-menu>
</template>
<script>
import { ref } from 'vue'
import MouseMenu from '@clownjs/mouse-menu';
export default {
  components: {
    MouseMenu
  },
  setup () {
    const dom = ref()
    const mouseMenuEl = ref()
    const showMenu = (e) => {
      e.preventDefault()
      const { x, y } = e;
      mouseMenuEl.value.show(x,y);
    }
    return {
      dom,
      mouseMenuEl,
      showMenu,
      options: {
        el: dom.value,
        // Other Options...
      } 
    }
  }
}
</script>

其他说明

为了性能,指令封装模式默认只对mounted钩子进行挂载。
当使用场景中有params参数传入菜单函数,有可能需要在组件更新时更新菜单,这时可以同时把update也挂载上。可参考以下写法:

import { MouseMenuDirective } from '@clownjs/mouse-menu';
export default {
  directive: {
    MouseMenu: {
      ...MouseMenuDirective,
      updated: MouseMenuDirective.mounted
    }
  }
}
  • UMD Name: HowdyMouseMenu
  • Example in ElementPlusTable: Demo