├── .babelrc ├── .editorconfig ├── .gitignore ├── README.md ├── dist ├── vue-easycm.js └── vue-easycm.js.map ├── index.html ├── package.json ├── src ├── App.vue ├── assets │ └── logo.png ├── iconfont │ └── iconfont.css ├── lib │ ├── EasyCm.vue │ └── index.js └── main.js └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }], 4 | "stage-3" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log 4 | yarn-error.log 5 | 6 | # Editor directories and files 7 | .idea 8 | *.suo 9 | *.ntvs* 10 | *.njsproj 11 | *.sln 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # vue-easycm 3 | 4 | 5 | 6 | ### 一个简单好用的 VUE 环境菜单 (Context Menu) 7 | 8 | ![](https://img.shields.io/npm/dw/vue-easycm.svg) 9 | 10 | 11 | > 更多demo: http://boenfu.github.io/vue-easycm/ 12 | 13 | 14 | ![http://boho.image.alimmdn.com/github/easycmdemo.gif?t=1524493555136](http://boho.image.alimmdn.com/github/easycmdemo.gif?t=1524493555136) 15 | 16 | * 配置简单 自定义程度高 17 | 18 | * 多种引用方式 19 | 20 | * 最高三层菜单 21 | 22 | * 可添加字体图标 23 | 24 | * 边界检测 25 | 26 | 27 | 28 | 29 | ## Install 30 | 31 | 32 | 33 | ``` 34 | npm install vue-easycm --save 35 | ``` 36 | 37 | 38 | 39 | ## Use 40 | 41 | ###   1.Import 导入 42 | 43 | 44 | 45 | ```js 46 | ES6 47 | 48 | // 方法1.通过use挂载 49 | import VueEasyCm from 'vue-easycm' 50 | Vue.use(VueEasyCm) 51 | 52 | 53 | // 方法2.通过require 导入 54 | var VueEasyCm = require('VueEasyCm') 55 | 56 | 57 | 58 | // 方法3.或者直接导入js文件 59 | 60 | 61 | ``` 62 | 63 | 64 | 65 | ###   2.Basic Usage 基础用法 66 | 67 | 68 | 69 | 1. 在需要触发 环境菜单 的容器标签上加上(固定写法) 70 | 71 | 例: 72 | 73 | ```vue 74 |
75 | ``` 76 | 77 | ​ 78 | 79 | 2. 任意位置导入组件(选项数组必传,格式见配置项) 80 | 81 | 例: 82 | 83 | ```vue 84 | 85 | ``` 86 | 87 | 88 | 89 | 90 | ### 3.Options 配置项 91 | 92 | | 选项名 | 是否必须 | 默认值 | 介绍 | 93 | | :----------: | :------: | :--------------: | :--------------: | 94 | | :list | true | 无 | 选项数组 | 95 | | :tag | false | 无 | 配置多个时的标记 | 96 | | @ecmcb | false | 无 | 返回触发元素序号 | 97 | | :underline | false | false | 是否开启下划线 | 98 | | :arrow | false | false | 是否开启箭头 | 99 | | :border | false | true | 是否开启边界检测 | 100 | | :itemWidth | false | 140 | 列表项宽度 | 101 | | :itemHeight | false | 36 | 列表项高度 | 102 | | :itemSize | false | 14 | 列表项字体大小 | 103 | | :offset | false | { x: 6, y: 2 } | 显示点偏移量 | 104 | | :borderWidth | false | 6 | 边界距离 | 105 | 106 | 详细介绍: 107 | 108 | 1. 数组格式如下 109 | 110 | ```js 111 | [{ 112 | text: 'Play Now', 113 | icon: 'iconfont icon-bofang', //选填 字体图标 class 114 | children: [] //选填 115 | }] 116 | ``` 117 | 118 | *嵌套的子项格式一致 119 | 120 | ​ 121 | 122 | 2. tag --> 标记 123 | 124 | 需要配置多个菜单时添加 tag , 类似取个 id 125 | 126 | 此时 @contextmenu="\$easycm(\$event,\$root,[tag])" 需要加上 tag 的值 127 | 128 | 如: 129 | 130 | ```vue 131 |
132 |

133 |
134 | 135 | 136 | ``` 137 | 138 | 这个时候 在 p 元素上会触发 tag 为 2 的菜单 139 | 140 | div 的其他部分会触发 tag 为 1 的菜单 141 | 142 | ​ 143 | 144 | 3. ecmcb --> 回调函数 145 | 146 | 解释:返回触发的序号数组,便于触发相应逻辑 147 | 148 | 如: 149 | 150 | ​ [0] 代表第一层的第一项 151 | 152 | ​ [0,1] 代表第一层的第一项的第二个子项 153 | 154 | 详见 demo code 155 | 156 | ​ 157 | 158 | 4. 边界检测 见 demo gif 159 | 160 | ​ 161 | 162 | 5. offset --> 显示点偏移量 163 | 164 | 解释: 菜单显示位置的左上角离鼠标的距离 165 | 166 | 如: {x:10,y:10} 167 | 168 | ​ 169 | 170 | *数值参数均无需带单位 171 | 172 | 173 | 174 | 175 | 176 | ## 自定义样式 177 | 178 | 编写 预置的空 easy-cm-ul 样式类来修改样式 179 | 180 | ```html 181 | // 代码结构 182 | 197 | ``` 198 | 199 | 例如: 200 | 201 | ![http://boho.image.alimmdn.com/github/p1.png?t=1524498301156](http://boho.image.alimmdn.com/github/p1.png) 202 | 203 | ![http://boho.image.alimmdn.com/github/p2.png](http://boho.image.alimmdn.com/github/p2.png) 204 | 205 | 206 | 207 | ## Demo Code 208 | 209 | 210 | 211 | ```vue 212 | // gif 图源码 213 | 222 | 270 | ``` 271 | -------------------------------------------------------------------------------- /dist/vue-easycm.js: -------------------------------------------------------------------------------- 1 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("VueEasyCm",[],e):"object"==typeof exports?exports.VueEasyCm=e():t.VueEasyCm=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var o=i[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,n){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/dist/",e(e.s=1)}([function(t,e,i){"use strict";e.a={name:"EasyCm",data:function(){return{show:!1,axis:{x:0,y:0}}},props:{tag:{},list:{required:!0},underline:{default:!1},arrow:{default:!1},border:{default:!0},itemWidth:{default:140},itemHeight:{default:36},itemSize:{default:14},offset:{default:function(){return{x:6,y:2}}},borderWidth:{default:6}},mounted:function(){var t=this;this.$root.$on("easyAxis",function(e){e.tag==t.tag&&(t.show=!0,t.axis=e)}),document.addEventListener("click",function(){t.show=!1},!0)},watch:{axis:function(){if(this.border){var t=document.body.offsetWidth,e=document.body.offsetHeight;this.axis.x+this.offset.x+this.itemWidth>=t&&(this.axis.x=t-this.itemWidth-this.borderWidth-this.offset.x),this.axis.y+this.offset.y+this.itemHeight*this.list.length>=e&&(this.axis.y=e-this.itemHeight*this.list.length-this.borderWidth-this.offset.y)}}},computed:{axisComputed:function(){return{top:this.axis.y+this.offset.y+"px",left:this.axis.x+this.offset.x+"px"}},liStyle:function(){return{width:this.itemWidth+"px",height:this.itemHeight+"px",lineHeight:this.itemHeight+"px",fontSize:this.itemSize+"px"}},firstLeft:function(){var t=document.body.offsetWidth;return this.axis.x+2*this.itemWidth>=t},secondLeft:function(){var t=document.body.offsetWidth;return this.axis.x+3*this.itemWidth>=t}},methods:{secondBorderCheck:function(t){var e=document.body.offsetWidth,i=document.body.offsetHeight,n=this.axis.y+(t+this.list[t].children.length)*this.itemHeight;return{left:this.axis.x+2*this.itemWidth>=e?"-100%":"100%",top:i>=n?0:-(this.list[t].children.length-1)*this.itemHeight+"px"}},thirdBorderCheck:function(t,e){var i=document.body.offsetWidth,n=document.body.offsetHeight,o=this.axis.y+this.list[t].children[e].children.length*this.itemHeight+(t+e)*this.itemHeight+parseInt(this.secondBorderCheck(t).top);return{left:this.axis.x+3*this.itemWidth>=i?"-100%":"100%",top:o>n?-(this.list[t].children[e].children.length-1)*this.itemHeight+"px":0}},callback:function(t){this.$emit("ecmcb",t)}}}},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=i(2),o={install:function(t){t.component("easy-cm",n.a),t.prototype.$easycm=function(t,e,i){t.stopPropagation(),t.preventDefault(),e.$emit("easyAxis",{tag:i,x:t.clientX,y:t.clientY})}}};"undefined"!=typeof window&&window.Vue&&window.Vue.use(o),e.default=o},function(t,e,i){"use strict";function n(t){i(3)}var o=i(0),r=i(9),s=i(8),a=n,c=s(o.a,r.a,!1,a,"data-v-92a164f6",null);e.a=c.exports},function(t,e,i){var n=i(4);"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);i(6)("971827e6",n,!0,{})},function(t,e,i){e=t.exports=i(5)(!1),e.push([t.i,'.icon[data-v-92a164f6]{width:.9em;height:.9em;vertical-align:-.15em;fill:currentColor;overflow:hidden;position:absolute;right:0;top:50%;transform:translateY(-50%)}.cm-container[data-v-92a164f6]{position:fixed;user-select:none;-ms-user-select:none;-webkit-user-select:none;-moz-user-select:none;z-index:9999}.cm-ul[data-v-92a164f6]{width:100%;padding:0;margin:0;list-style:none;box-shadow:0 0 1px #666;background-color:#fff;color:#2e2e2e}.cm-ul li[data-v-92a164f6]{width:100%;box-sizing:border-box;text-align:left;position:relative;cursor:pointer}.cm-ul li:hover>ul[data-v-92a164f6]{display:block}.cm-ul li div[data-v-92a164f6]{display:inline-block;box-sizing:border-box;width:100%;height:100%;padding:0 .8em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}.cm-ul li i[data-v-92a164f6]{display:inline-block;width:1em;font-size:1.3em;text-align:center}.cm-ul li div[data-v-92a164f6]:hover{background-color:#666;color:#fff}.cm-ul-2[data-v-92a164f6],.cm-ul-3[data-v-92a164f6]{position:absolute;top:0;display:none;z-index:10000}.cm-left svg[data-v-92a164f6]{transform:translateY(-50%) rotate(180deg);left:0}.cm-underline li div[data-v-92a164f6]:after{content:"";width:90%;position:absolute;left:5%;top:0;height:1px;background-color:#ccc;z-index:10001}.cm-underline>li:first-child>div[data-v-92a164f6]:after,.cm-underline li div[data-v-92a164f6]:hover:after{display:none}',""])},function(t,e){function i(t,e){var i=t[1]||"",o=t[3];if(!o)return i;if(e&&"function"==typeof btoa){var r=n(o);return[i].concat(o.sources.map(function(t){return"/*# sourceURL="+o.sourceRoot+t+" */"})).concat([r]).join("\n")}return[i].join("\n")}function n(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var n=i(e,t);return e[2]?"@media "+e[2]+"{"+n+"}":n}).join("")},e.i=function(t,i){"string"==typeof t&&(t=[[null,t,""]]);for(var n={},o=0;oi.parts.length&&(n.parts.length=i.parts.length)}else{for(var s=[],o=0;o0?i("svg",{staticClass:"icon",attrs:{"aria-hidden":"true"}},[i("use",{attrs:{"xlink:href":"#icon-youjiantou"}})]):t._e()]),t._v(" "),e.children&&e.children.length>0?i("ul",{staticClass:"cm-ul cm-ul-2 easy-cm-ul",class:t.underline?"cm-underline":"",style:t.secondBorderCheck(n)},t._l(e.children,function(e,o){return i("li",{style:t.liStyle},[i("div",{class:t.secondLeft?"cm-left":"",on:{click:function(e){e.stopPropagation(),t.callback([n,o])}}},[i("i",{class:e.icon}),t._v(" "),i("span",[t._v(t._s(e.text))]),t._v(" "),t.arrow&&e.children&&e.children.length>0?i("svg",{staticClass:"icon",attrs:{"aria-hidden":"true"}},[i("use",{attrs:{"xlink:href":"#icon-youjiantou"}})]):t._e()]),t._v(" "),e.children&&e.children.length>0?i("ul",{staticClass:"cm-ul cm-ul-3 easy-cm-ul",class:t.underline?"cm-underline":"",style:t.thirdBorderCheck(n,o)},t._l(e.children,function(e,r){return i("li",{style:t.liStyle},[i("div",{on:{click:function(e){e.stopPropagation(),t.callback([n,o,r])}}},[i("i",{class:e.icon}),t._v(" "),i("span",[t._v(t._s(e.text))])])])})):t._e()])})):t._e()])}))]):t._e()},o=[],r={render:n,staticRenderFns:o};e.a=r}])}); 2 | //# sourceMappingURL=vue-easycm.js.map -------------------------------------------------------------------------------- /dist/vue-easycm.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///vue-easycm.js","webpack:///webpack/bootstrap 8ad54f29a9626d392386","webpack:///src/lib/EasyCm.vue","webpack:///./src/lib/index.js","webpack:///./src/lib/EasyCm.vue","webpack:///./src/lib/EasyCm.vue?aa21","webpack:///./src/lib/EasyCm.vue?dd6e","webpack:///./node_modules/_css-loader@0.28.11@css-loader/lib/css-base.js","webpack:///./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/addStylesClient.js","webpack:///./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/listToStyles.js","webpack:///./node_modules/_vue-loader@13.7.1@vue-loader/lib/component-normalizer.js","webpack:///./src/lib/EasyCm.vue?200e"],"names":["root","factory","exports","module","define","amd","self","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","data","show","axis","x","y","props","tag","list","required","underline","default","arrow","border","itemWidth","itemHeight","itemSize","offset","borderWidth","mounted","_this","$root","$on","document","addEventListener","watch","bw","body","offsetWidth","bh","offsetHeight","length","computed","axisComputed","top","left","liStyle","width","height","lineHeight","fontSize","firstLeft","secondLeft","methods","secondBorderCheck","cy","children","thirdBorderCheck","si","parseInt","callback","indexList","$emit","value","__WEBPACK_IMPORTED_MODULE_0__EasyCm_vue__","VueEasyCm","install","Vue","component","$easycm","e","stopPropagation","preventDefault","clientX","clientY","window","use","injectStyle","ssrContext","__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_1_vue_loader_lib_selector_type_script_index_0_EasyCm_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_1_vue_loader_lib_template_compiler_index_id_data_v_92a164f6_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_1_vue_loader_lib_selector_type_template_index_0_EasyCm_vue__","normalizeComponent","__vue_styles__","Component","content","locals","push","cssWithMappingToString","item","useSourceMap","cssMapping","btoa","sourceMapping","toComment","concat","sources","map","source","sourceRoot","join","sourceMap","unescape","encodeURIComponent","JSON","stringify","toString","mediaQuery","alreadyImportedModules","id","addStylesToDom","styles","domStyle","stylesInDom","refs","j","parts","addStyle","createStyleElement","styleElement","createElement","type","head","appendChild","obj","update","remove","querySelector","ssrIdKey","isProduction","noop","parentNode","removeChild","isOldIE","styleIndex","singletonCounter","singletonElement","applyToSingletonTag","bind","applyToTag","newObj","css","media","index","styleSheet","cssText","replaceText","cssNode","createTextNode","childNodes","insertBefore","setAttribute","options","ssrId","firstChild","hasDocument","DEBUG","Error","listToStyles","getElementsByTagName","navigator","test","userAgent","toLowerCase","parentId","_isProduction","_options","newList","mayRemove","textStore","replacement","filter","Boolean","newStyles","part","rawScriptExports","compiledTemplate","functionalTemplate","injectStyles","scopeId","moduleIdentifier","esModule","scriptExports","render","staticRenderFns","_compiled","functional","_scopeId","hook","context","$vnode","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","existing","beforeCreate","_injectStyles","h","_vm","_h","$createElement","_c","_self","staticClass","style","staticStyle","position","overflow","attrs","aria-hidden","viewBox","_v","class","_l","on","click","$event","icon","_s","text","xlink:href","_e","second","third","ti","esExports"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,OAAA,eAAAH,GACA,gBAAAC,SACAA,QAAA,UAAAD,IAEAD,EAAA,UAAAC,KACC,mBAAAK,WAAAC,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAR,OAGA,IAAAC,GAAAQ,EAAAD,IACAE,EAAAF,EACAG,GAAA,EACAX,WAUA,OANAM,GAAAE,GAAAI,KAAAX,EAAAD,QAAAC,IAAAD,QAAAO,GAGAN,EAAAU,GAAA,EAGAV,EAAAD,QAvBA,GAAAS,KA4DA,OAhCAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,SAAAf,EAAAgB,EAAAC,GACAV,EAAAW,EAAAlB,EAAAgB,IACAG,OAAAC,eAAApB,EAAAgB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAAvB,GACA,GAAAgB,GAAAhB,KAAAwB,WACA,WAA2B,MAAAxB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAM,GAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDpB,EAAAuB,EAAA,SAGAvB,IAAAwB,EAAA,KDgBM,SAAU9B,EAAQ+B,EAAqBzB,GAE7C,YE1BAyB,GAAA,GFiFEhB,KE/EF,SFgFEiB,KAAM,WACJ,OAEEC,ME/EN,EFiFMC,MACEC,EE/ER,EFgFQC,EE7ER,KFkFEC,OACEC,OACAC,MACEC,UE/EN,GFkFIC,WACEC,SE/EN,GFkFIC,OACED,SE/EN,GFkFIE,QACEF,SE/EN,GFkFIG,WACEH,QE/EN,KFkFII,YACEJ,QE/EN,IFkFIK,UACEL,QE/EN,IFkFIM,QACEN,QAAS,WACP,OACEP,EAAG,EAAGC,EE/EhB,KFoFIa,aACEP,QE9EN,IFiFEQ,QAAS,WEhFX,GAAAC,GAAA/C,IFmFIA,MAAKgD,MAAMC,IAAI,WAAY,SAAUnB,GAC/BA,EAAKI,KAAOa,EAAMb,MACpBa,EAAMlB,MElFd,EFmFQkB,EAAMjB,KElFdA,KFqFIoB,SAASC,iBAAiB,QAAS,WACjCJ,EAAMlB,MElFZ,IACA,IFqFEuB,OACEtB,KAAM,WACJ,GAAI9B,KAAKwC,OEnFf,CFoFQ,GAAIa,GAAKH,SAASI,KAAKC,YACnBC,EAAKN,SAASI,KEpF1BG,YFqFYzD,MAAK8B,KAAKC,EAAI/B,KAAK4C,OAAOb,EAAI/B,KAAKyC,WAAaY,IAClDrD,KAAK8B,KAAKC,EAAIsB,EAAKrD,KAAKyC,UAAYzC,KAAK6C,YAAc7C,KAAK4C,OEpFtEb,GFsFY/B,KAAK8B,KAAKE,EAAIhC,KAAK4C,OAAOZ,EAAIhC,KAAK0C,WAAa1C,KAAKmC,KAAKuB,QAAUF,IACtExD,KAAK8B,KAAKE,EAAIwB,EAAKxD,KAAK0C,WAAa1C,KAAKmC,KAAKuB,OAAS1D,KAAK6C,YAAc7C,KAAK4C,OEpF1FZ,MFyFE2B,UACEC,aAAc,WACZ,OACEC,IAAK7D,KAAK8B,KAAKE,EAAIhC,KAAK4C,OAAOZ,EEpFvC,KFqFQ8B,KAAM9D,KAAK8B,KAAKC,EAAI/B,KAAK4C,OAAOb,EEnFxC,OFsFIgC,QAAS,WACP,OACEC,MAAOhE,KAAKyC,UEpFpB,KFqFQwB,OAAQjE,KAAK0C,WEpFrB,KFqFQwB,WAAYlE,KAAK0C,WEpFzB,KFqFQyB,SAAUnE,KAAK2C,SEnFvB,OFsFIyB,UAAW,WACT,GAAIf,GAAKH,SAASI,KEpFxBC,WFqFM,OAAOvD,MAAK8B,KAAKC,EAAqB,EAAjB/B,KAAKyC,WEpFhCY,GFsFIgB,WAAY,WACV,GAAIhB,GAAKH,SAASI,KEpFxBC,WFqFM,OAAOvD,MAAK8B,KAAKC,EAAqB,EAAjB/B,KAAKyC,WEpFhCY,IFuFEiB,SACEC,kBAAmB,SAA2BlE,GAC5C,GAAIgD,GAAKH,SAASI,KAAKC,YACnBC,EAAKN,SAASI,KErFxBG,aFsFUe,EAAKxE,KAAK8B,KAAKE,GAAK3B,EAAIL,KAAKmC,KAAK9B,GAAGoE,SAASf,QAAU1D,KErFlE0C,UFsFM,QACEoB,KAAM9D,KAAK8B,KAAKC,EAAqB,EAAjB/B,KAAKyC,WAAiBY,EAAK,QErFvD,OFsFQQ,IAAKL,GAAMgB,EAAK,IAAMxE,KAAKmC,KAAK9B,GAAGoE,SAASf,OAAS,GAAK1D,KAAK0C,WEpFvE,OFuFIgC,iBAAkB,SAA0BrE,EAAGsE,GAC7C,GAAItB,GAAKH,SAASI,KAAKC,YACnBC,EAAKN,SAASI,KEtFxBG,aFuFUe,EAAKxE,KAAK8B,KAAKE,EAAIhC,KAAKmC,KAAK9B,GAAGoE,SAASE,GAAIF,SAASf,OAAS1D,KAAK0C,YAAcrC,EAAIsE,GAAM3E,KAAK0C,WAAakC,SAAS5E,KAAKuE,kBAAkBlE,GEtFxJwD,IFuFM,QACEC,KAAM9D,KAAK8B,KAAKC,EAAqB,EAAjB/B,KAAKyC,WAAiBY,EAAK,QEtFvD,OFuFQQ,IAAKW,EAAKhB,IAAOxD,KAAKmC,KAAK9B,GAAGoE,SAASE,GAAIF,SAASf,OAAS,GAAK1D,KAAK0C,WAAa,KErF5F,IFwFImC,SAAU,SAAkBC,GAC1B9E,KAAK+E,MAAM,QEtFjBD,OF6FM,SAAUlF,EAAQ+B,EAAqBzB,GAE7C,YACAY,QAAOC,eAAeY,EAAqB,cAAgBqD,OAAO,GAC7C,IAAIC,GAA4C/E,EAAoB,GG/QnFgF,GACJC,QAAS,SAAUC,GACjBA,EAAIC,UAAU,UAAWJ,EAAA,GACzBG,EAAI7D,UAAU+D,QAAU,SAAUC,EAAE9F,EAAKyC,GACvCqD,EAAEC,kBACFD,EAAEE,iBACFhG,EAAKsF,MAAM,YACT7C,IAAKA,EACLH,EAAGwD,EAAEG,QACL1D,EAAGuD,EAAEI,YAMS,oBAAXC,SAA0BA,OAAOR,KACxCQ,OAAOR,IAAIS,IAAIX,GAGnBvD,EAAA,WHqRM,SAAU/B,EAAQ+B,EAAqBzB,GAE7C,YI3SA,SAAA4F,GAAAC,GACA7F,EAAA,GJ2SqB,GAAI8F,GAAoI9F,EAAoB,GI5SjL+F,EAAA/F,EAAA,GAGAgG,EAAAhG,EAAA,GASAiG,EAAAL,EAKAM,EAAAF,EACAF,EAAA,EACAC,EAAA,GATA,EAWAE,EAPA,kBAEA,KAUAxE,GAAA,EAAAyE,EAAA,SJoTM,SAAUxG,EAAQD,EAASO,GK3UjC,GAAAmG,GAAAnG,EAAA,EACA,iBAAAmG,SAAAzG,EAAAS,EAAAgG,EAAA,MACAA,EAAAC,SAAA1G,EAAAD,QAAA0G,EAAAC,OAEApG,GAAA,cAAAmG,GAAA,OLoVM,SAAUzG,EAAQD,EAASO,GM3VjCP,EAAAC,EAAAD,QAAAO,EAAA,OAKAP,EAAA4G,MAAA3G,EAAAS,EAAA,o3CAA64C,MNoWv4C,SAAUT,EAAQD,GOxTxB,QAAA6G,GAAAC,EAAAC,GACA,GAAAL,GAAAI,EAAA,OACAE,EAAAF,EAAA,EACA,KAAAE,EACA,MAAAN,EAGA,IAAAK,GAAA,kBAAAE,MAAA,CACA,GAAAC,GAAAC,EAAAH,EAKA,QAAAN,GAAAU,OAJAJ,EAAAK,QAAAC,IAAA,SAAAC,GACA,uBAAAP,EAAAQ,WAAAD,EAAA,SAGAH,QAAAF,IAAAO,KAAA,MAGA,OAAAf,GAAAe,KAAA,MAIA,QAAAN,GAAAO,GAKA,yEAHAT,KAAAU,SAAAC,mBAAAC,KAAAC,UAAAJ,MAGA,MArEAzH,EAAAD,QAAA,SAAA+G,GACA,GAAAvE,KAwCA,OArCAA,GAAAuF,SAAA,WACA,MAAA1H,MAAAiH,IAAA,SAAAR,GACA,GAAAJ,GAAAG,EAAAC,EAAAC,EACA,OAAAD,GAAA,GACA,UAAAA,EAAA,OAAmCJ,EAAA,IAEnCA,IAEGe,KAAA,KAIHjF,EAAA9B,EAAA,SAAAJ,EAAA0H,GACA,gBAAA1H,KACAA,IAAA,KAAAA,EAAA,KAEA,QADA2H,MACAvH,EAAA,EAAgBA,EAAAL,KAAA0D,OAAiBrD,IAAA,CACjC,GAAAwH,GAAA7H,KAAAK,GAAA,EACA,iBAAAwH,KACAD,EAAAC,IAAA,GAEA,IAAAxH,EAAA,EAAYA,EAAAJ,EAAAyD,OAAoBrD,IAAA,CAChC,GAAAoG,GAAAxG,EAAAI,EAKA,iBAAAoG,GAAA,IAAAmB,EAAAnB,EAAA,MACAkB,IAAAlB,EAAA,GACAA,EAAA,GAAAkB,EACKA,IACLlB,EAAA,OAAAA,EAAA,aAAAkB,EAAA,KAEAxF,EAAAoE,KAAAE,MAIAtE,IP6YM,SAAUvC,EAAQD,EAASO,GQtWjC,QAAA4H,GAAAC,GACA,OAAA1H,GAAA,EAAiBA,EAAA0H,EAAArE,OAAmBrD,IAAA,CACpC,GAAAoG,GAAAsB,EAAA1H,GACA2H,EAAAC,EAAAxB,EAAAoB,GACA,IAAAG,EAAA,CACAA,EAAAE,MACA,QAAAC,GAAA,EAAqBA,EAAAH,EAAAI,MAAA1E,OAA2ByE,IAChDH,EAAAI,MAAAD,GAAA1B,EAAA2B,MAAAD,GAEA,MAAYA,EAAA1B,EAAA2B,MAAA1E,OAAuByE,IACnCH,EAAAI,MAAA7B,KAAA8B,EAAA5B,EAAA2B,MAAAD,IAEAH,GAAAI,MAAA1E,OAAA+C,EAAA2B,MAAA1E,SACAsE,EAAAI,MAAA1E,OAAA+C,EAAA2B,MAAA1E,YAEK,CAEL,OADA0E,MACAD,EAAA,EAAqBA,EAAA1B,EAAA2B,MAAA1E,OAAuByE,IAC5CC,EAAA7B,KAAA8B,EAAA5B,EAAA2B,MAAAD,IAEAF,GAAAxB,EAAAoB,KAA8BA,GAAApB,EAAAoB,GAAAK,KAAA,EAAAE,WAK9B,QAAAE,KACA,GAAAC,GAAArF,SAAAsF,cAAA,QAGA,OAFAD,GAAAE,KAAA,WACAC,EAAAC,YAAAJ,GACAA,EAGA,QAAAF,GAAAO,GACA,GAAAC,GAAAC,EACAP,EAAArF,SAAA6F,cAAA,SAAAC,EAAA,MAAAJ,EAAAf,GAAA,KAEA,IAAAU,EAAA,CACA,GAAAU,EAGA,MAAAC,EAOAX,GAAAY,WAAAC,YAAAb,GAIA,GAAAc,EAAA,CAEA,GAAAC,GAAAC,GACAhB,GAAAiB,MAAAlB,KACAO,EAAAY,EAAAC,KAAA,KAAAnB,EAAAe,GAAA,GACAR,EAAAW,EAAAC,KAAA,KAAAnB,EAAAe,GAAA,OAGAf,GAAAD,IACAO,EAAAc,EAAAD,KAAA,KAAAnB,GACAO,EAAA,WACAP,EAAAY,WAAAC,YAAAb,GAMA,OAFAM,GAAAD,GAEA,SAAAgB,GACA,GAAAA,EAAA,CACA,GAAAA,EAAAC,MAAAjB,EAAAiB,KACAD,EAAAE,QAAAlB,EAAAkB,OACAF,EAAAvC,YAAAuB,EAAAvB,UACA,MAEAwB,GAAAD,EAAAgB,OAEAd,MAcA,QAAAW,GAAAlB,EAAAwB,EAAAjB,EAAAF,GACA,GAAAiB,GAAAf,EAAA,GAAAF,EAAAiB,GAEA,IAAAtB,EAAAyB,WACAzB,EAAAyB,WAAAC,QAAAC,EAAAH,EAAAF,OACG,CACH,GAAAM,GAAAjH,SAAAkH,eAAAP,GACAQ,EAAA9B,EAAA8B,UACAA,GAAAN,IAAAxB,EAAAa,YAAAiB,EAAAN,IACAM,EAAA3G,OACA6E,EAAA+B,aAAAH,EAAAE,EAAAN,IAEAxB,EAAAI,YAAAwB,IAKA,QAAAR,GAAApB,EAAAK,GACA,GAAAiB,GAAAjB,EAAAiB,IACAC,EAAAlB,EAAAkB,MACAzC,EAAAuB,EAAAvB,SAiBA,IAfAyC,GACAvB,EAAAgC,aAAA,QAAAT,GAEAU,EAAAC,OACAlC,EAAAgC,aAAAvB,EAAAJ,EAAAf,IAGAR,IAGAwC,GAAA,mBAAAxC,EAAAL,QAAA,SAEA6C,GAAA,uDAAyDjD,KAAAU,SAAAC,mBAAAC,KAAAC,UAAAJ,MAAA,OAGzDkB,EAAAyB,WACAzB,EAAAyB,WAAAC,QAAAJ,MACG,CACH,KAAAtB,EAAAmC,YACAnC,EAAAa,YAAAb,EAAAmC,WAEAnC,GAAAI,YAAAzF,SAAAkH,eAAAP,KArNA,GAAAc,GAAA,mBAAAzH,SAEA,uBAAA0H,gBACAD,EACA,SAAAE,OACA,0JAKA,IAAAC,GAAA5K,EAAA,GAeA+H,KAQAS,EAAAiC,IAAAzH,SAAAwF,MAAAxF,SAAA6H,qBAAA,YACAvB,EAAA,KACAD,EAAA,EACAN,GAAA,EACAC,EAAA,aACAsB,EAAA,KACAxB,EAAA,kBAIAK,EAAA,mBAAA2B,YAAA,eAAAC,KAAAD,UAAAE,UAAAC,cAEAvL,GAAAD,QAAA,SAAAyL,EAAAjJ,EAAAkJ,EAAAC,GACArC,EAAAoC,EAEAb,EAAAc,KAEA,IAAAvD,GAAA+C,EAAAM,EAAAjJ,EAGA,OAFA2F,GAAAC,GAEA,SAAAwD,GAEA,OADAC,MACAnL,EAAA,EAAmBA,EAAA0H,EAAArE,OAAmBrD,IAAA,CACtC,GAAAoG,GAAAsB,EAAA1H,GACA2H,EAAAC,EAAAxB,EAAAoB,GACAG,GAAAE,OACAsD,EAAAjF,KAAAyB,GAEAuD,GACAxD,EAAA+C,EAAAM,EAAAG,GACAzD,EAAAC,IAEAA,IAEA,QAAA1H,GAAA,EAAmBA,EAAAmL,EAAA9H,OAAsBrD,IAAA,CACzC,GAAA2H,GAAAwD,EAAAnL,EACA,QAAA2H,EAAAE,KAAA,CACA,OAAAC,GAAA,EAAuBA,EAAAH,EAAAI,MAAA1E,OAA2ByE,IAClDH,EAAAI,MAAAD,WAEAF,GAAAD,EAAAH,OAwFA,IAAAqC,GAAA,WACA,GAAAuB,KAEA,iBAAA1B,EAAA2B,GAEA,MADAD,GAAA1B,GAAA2B,EACAD,EAAAE,OAAAC,SAAAxE,KAAA,WRmfM,SAAUxH,EAAQD,GS3pBxBC,EAAAD,QAAA,SAAAyL,EAAAjJ,GAGA,OAFA4F,MACA8D,KACAxL,EAAA,EAAiBA,EAAA8B,EAAAuB,OAAiBrD,IAAA,CAClC,GAAAoG,GAAAtE,EAAA9B,GACAwH,EAAApB,EAAA,GACAoD,EAAApD,EAAA,GACAqD,EAAArD,EAAA,GACAY,EAAAZ,EAAA,GACAqF,GACAjE,GAAAuD,EAAA,IAAA/K,EACAwJ,MACAC,QACAzC,YAEAwE,GAAAhE,GAGAgE,EAAAhE,GAAAO,MAAA7B,KAAAuF,GAFA/D,EAAAxB,KAAAsF,EAAAhE,IAAmCA,KAAAO,OAAA0D,KAKnC,MAAA/D,KTuqBM,SAAUnI,EAAQD,GU1rBxBC,EAAAD,QAAA,SACAoM,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,GAAAC,GACAC,EAAAP,QAGAtD,QAAAsD,GAAAzJ,OACA,YAAAmG,GAAA,aAAAA,IACA4D,EAAAN,EACAO,EAAAP,EAAAzJ,QAIA,IAAAkI,GAAA,kBAAA8B,GACAA,EAAA9B,QACA8B,CAGAN,KACAxB,EAAA+B,OAAAP,EAAAO,OACA/B,EAAAgC,gBAAAR,EAAAQ,gBACAhC,EAAAiC,WAAA,GAIAR,IACAzB,EAAAkC,YAAA,GAIAP,IACA3B,EAAAmC,SAAAR,EAGA,IAAAS,EA4BA,IA3BAR,GACAQ,EAAA,SAAAC,GAEAA,EACAA,GACA7M,KAAA8M,QAAA9M,KAAA8M,OAAA/G,YACA/F,KAAA+M,QAAA/M,KAAA+M,OAAAD,QAAA9M,KAAA+M,OAAAD,OAAA/G,WAEA8G,GAAA,mBAAAG,uBACAH,EAAAG,qBAGAd,GACAA,EAAA3L,KAAAP,KAAA6M,GAGAA,KAAAI,uBACAJ,EAAAI,sBAAAC,IAAAd,IAKA5B,EAAA2C,aAAAP,GACGV,IACHU,EAAAV,GAGAU,EAAA,CACA,GAAAF,GAAAlC,EAAAkC,WACAU,EAAAV,EACAlC,EAAA+B,OACA/B,EAAA6C,YAEAX,IAQAlC,EAAA8C,cAAAV,EAEApC,EAAA+B,OAAA,SAAAgB,EAAAV,GAEA,MADAD,GAAArM,KAAAsM,GACAO,EAAAG,EAAAV,KAVArC,EAAA6C,aAAAD,KACArG,OAAAqG,EAAAR,IACAA,GAaA,OACAP,WACA1M,QAAA2M,EACA9B,aVysBM,SAAU5K,EAAQ+B,EAAqBzB,GAE7C,YW/yBA,IAAAqM,GAAA,WAA0B,GAAAiB,GAAAxN,KAAayN,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,CAAwB,OAAAD,GAAA,KAAAG,EAAA,OAA4BE,YAAA,eAAAC,MAAAN,EAAA,eAAoDG,EAAA,OAAYI,aAAaC,SAAA,WAAAhK,MAAA,MAAAC,OAAA,MAAAgK,SAAA,UAAuEC,OAAQC,cAAA,UAAsBR,EAAA,UAAeO,OAAOrG,GAAA,kBAAAuG,QAAA,mBAAkDT,EAAA,QAAaO,OAAOxN,EAAA,0EAAwE8M,EAAAa,GAAA,KAAAV,EAAA,MAA2BE,YAAA,2BAAAS,MAAAd,EAAAnL,UAAA,mBAA6EmL,EAAAe,GAAAf,EAAA,cAAA/G,EAAAsD,GAAwC,MAAA4D,GAAA,MAAgBG,MAAAN,EAAA,UAAoBG,EAAA,OAAYW,MAAAd,EAAApJ,UAAA,aAAAoK,IAAqCC,MAAA,SAAAC,GAAyBA,EAAAlJ,kBAAyBgI,EAAA3I,UAAAkF,QAAwB4D,EAAA,KAAUW,MAAA7H,EAAAkI,OAAgBnB,EAAAa,GAAA,KAAAV,EAAA,QAAAH,EAAAa,GAAAb,EAAAoB,GAAAnI,EAAAoI,SAAArB,EAAAa,GAAA,KAAAb,EAAAjL,OAAAkE,EAAAhC,UAAAgC,EAAAhC,SAAAf,OAAA,EAAAiK,EAAA,OAAoIE,YAAA,OAAAK,OAA0BC,cAAA,UAAsBR,EAAA,OAAYO,OAAOY,aAAA,wBAAiCtB,EAAAuB,OAAAvB,EAAAa,GAAA,KAAA5H,EAAAhC,UAAAgC,EAAAhC,SAAAf,OAAA,EAAAiK,EAAA,MAAgFE,YAAA,2BAAAS,MAAAd,EAAAnL,UAAA,kBAAAyL,MAAAN,EAAAjJ,kBAAAwF,IAAkHyD,EAAAe,GAAA9H,EAAA,kBAAAuI,EAAArK,GAA4C,MAAAgJ,GAAA,MAAgBG,MAAAN,EAAA,UAAoBG,EAAA,OAAYW,MAAAd,EAAAnJ,WAAA,aAAAmK,IAAsCC,MAAA,SAAAC,GAAyBA,EAAAlJ,kBAAyBgI,EAAA3I,UAAAkF,EAAApF,QAA2BgJ,EAAA,KAAUW,MAAAU,EAAAL,OAAkBnB,EAAAa,GAAA,KAAAV,EAAA,QAAAH,EAAAa,GAAAb,EAAAoB,GAAAI,EAAAH,SAAArB,EAAAa,GAAA,KAAAb,EAAAjL,OAAAyM,EAAAvK,UAAAuK,EAAAvK,SAAAf,OAAA,EAAAiK,EAAA,OAA0IE,YAAA,OAAAK,OAA0BC,cAAA,UAAsBR,EAAA,OAAYO,OAAOY,aAAA,wBAAiCtB,EAAAuB,OAAAvB,EAAAa,GAAA,KAAAW,EAAAvK,UAAAuK,EAAAvK,SAAAf,OAAA,EAAAiK,EAAA,MAAoFE,YAAA,2BAAAS,MAAAd,EAAAnL,UAAA,kBAAAyL,MAAAN,EAAA9I,iBAAAqF,EAAApF,IAAoH6I,EAAAe,GAAAS,EAAA,kBAAAC,EAAAC,GAA6C,MAAAvB,GAAA,MAAgBG,MAAAN,EAAA,UAAoBG,EAAA,OAAYa,IAAIC,MAAA,SAAAC,GAAyBA,EAAAlJ,kBAAyBgI,EAAA3I,UAAAkF,EAAApF,EAAAuK,QAA8BvB,EAAA,KAAUW,MAAAW,EAAAN,OAAiBnB,EAAAa,GAAA,KAAAV,EAAA,QAAAH,EAAAa,GAAAb,EAAAoB,GAAAK,EAAAJ,gBAA0DrB,EAAAuB,UAAcvB,EAAAuB,YAAcvB,EAAAuB,MACjoEvC,KACA2C,GAAiB5C,SAAAC,kBACjB7K,GAAA","file":"vue-easycm.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"VueEasyCm\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueEasyCm\"] = factory();\n\telse\n\t\troot[\"VueEasyCm\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"VueEasyCm\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueEasyCm\"] = factory();\n\telse\n\t\troot[\"VueEasyCm\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n name: 'EasyCm',\n data: function data() {\n return {\n // 是否显示\n show: false,\n // 触发点坐标\n axis: {\n x: 0,\n y: 0\n }\n };\n },\n\n props: {\n tag: {},\n list: {\n required: true\n },\n // 是否开启下划线\n underline: {\n default: false\n },\n // 是否开启箭头\n arrow: {\n default: false\n },\n // 是否开启边界检测\n border: {\n default: true\n },\n // 列表项宽度\n itemWidth: {\n default: 140\n },\n // 列表项高度\n itemHeight: {\n default: 36\n },\n // 列表项字体\n itemSize: {\n default: 14\n },\n // 显示点偏移量\n offset: {\n default: function _default() {\n return {\n x: 6, y: 2\n };\n }\n },\n // 边界距离\n borderWidth: {\n default: 6\n }\n },\n mounted: function mounted() {\n var _this = this;\n\n this.$root.$on('easyAxis', function (axis) {\n if (axis.tag == _this.tag) {\n _this.show = true;\n _this.axis = axis;\n }\n });\n document.addEventListener('click', function () {\n _this.show = false;\n }, true);\n },\n\n watch: {\n axis: function axis() {\n if (this.border) {\n var bw = document.body.offsetWidth,\n bh = document.body.offsetHeight;\n if (this.axis.x + this.offset.x + this.itemWidth >= bw) {\n this.axis.x = bw - this.itemWidth - this.borderWidth - this.offset.x;\n }\n if (this.axis.y + this.offset.y + this.itemHeight * this.list.length >= bh) {\n this.axis.y = bh - this.itemHeight * this.list.length - this.borderWidth - this.offset.y;\n }\n }\n }\n },\n computed: {\n axisComputed: function axisComputed() {\n return {\n top: this.axis.y + this.offset.y + 'px',\n left: this.axis.x + this.offset.x + 'px'\n };\n },\n liStyle: function liStyle() {\n return {\n width: this.itemWidth + 'px',\n height: this.itemHeight + 'px',\n lineHeight: this.itemHeight + 'px',\n fontSize: this.itemSize + 'px'\n };\n },\n firstLeft: function firstLeft() {\n var bw = document.body.offsetWidth;\n return this.axis.x + this.itemWidth * 2 >= bw;\n },\n secondLeft: function secondLeft() {\n var bw = document.body.offsetWidth;\n return this.axis.x + this.itemWidth * 3 >= bw;\n }\n },\n methods: {\n secondBorderCheck: function secondBorderCheck(i) {\n var bw = document.body.offsetWidth,\n bh = document.body.offsetHeight;\n var cy = this.axis.y + (i + this.list[i].children.length) * this.itemHeight;\n return {\n left: this.axis.x + this.itemWidth * 2 >= bw ? '-100%' : '100%',\n top: bh >= cy ? 0 : -(this.list[i].children.length - 1) * this.itemHeight + 'px'\n };\n },\n thirdBorderCheck: function thirdBorderCheck(i, si) {\n var bw = document.body.offsetWidth,\n bh = document.body.offsetHeight;\n var cy = this.axis.y + this.list[i].children[si].children.length * this.itemHeight + (i + si) * this.itemHeight + parseInt(this.secondBorderCheck(i).top);\n return {\n left: this.axis.x + this.itemWidth * 3 >= bw ? '-100%' : '100%',\n top: cy > bh ? -(this.list[i].children[si].children.length - 1) * this.itemHeight + 'px' : 0\n };\n },\n callback: function callback(indexList) {\n this.$emit('ecmcb', indexList);\n }\n }\n});\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__EasyCm_vue__ = __webpack_require__(2);\n\nvar VueEasyCm = {\n install: function install(Vue) {\n Vue.component('easy-cm', __WEBPACK_IMPORTED_MODULE_0__EasyCm_vue__[\"a\" /* default */]);\n Vue.prototype.$easycm = function (e, root, tag) {\n e.stopPropagation();\n e.preventDefault();\n root.$emit('easyAxis', {\n tag: tag,\n x: e.clientX,\n y: e.clientY\n });\n };\n }\n};\n\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(VueEasyCm);\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (VueEasyCm);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_1_vue_loader_lib_selector_type_script_index_0_EasyCm_vue__ = __webpack_require__(0);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_1_vue_loader_lib_template_compiler_index_id_data_v_92a164f6_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_1_vue_loader_lib_selector_type_template_index_0_EasyCm_vue__ = __webpack_require__(9);\nfunction injectStyle (ssrContext) {\n __webpack_require__(3)\n}\nvar normalizeComponent = __webpack_require__(8)\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-92a164f6\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_1_vue_loader_lib_selector_type_script_index_0_EasyCm_vue__[\"a\" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_1_vue_loader_lib_template_compiler_index_id_data_v_92a164f6_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_1_vue_loader_lib_selector_type_template_index_0_EasyCm_vue__[\"a\" /* default */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Component.exports);\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a \n\n\n\n// WEBPACK FOOTER //\n// src/lib/EasyCm.vue","import EasyCm from './EasyCm.vue'\nconst VueEasyCm = {\n install: function (Vue) {\n Vue.component('easy-cm', EasyCm)\n Vue.prototype.$easycm = function (e,root,tag) {\n e.stopPropagation()\n e.preventDefault()\n root.$emit('easyAxis',{\n tag: tag,\n x: e.clientX,\n y: e.clientY\n })\n }\n }\n}\n\nif (typeof window !== 'undefined' && window.Vue) {\n window.Vue.use(VueEasyCm)\n}\n\nexport default VueEasyCm\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/index.js","function injectStyle (ssrContext) {\n require(\"!!vue-loader/node_modules/vue-style-loader!css-loader?minimize!../../node_modules/_vue-loader@13.7.1@vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-92a164f6\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/_vue-loader@13.7.1@vue-loader/lib/selector?type=styles&index=0!./EasyCm.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/_vue-loader@13.7.1@vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/_vue-loader@13.7.1@vue-loader/lib/selector?type=script&index=0!./EasyCm.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/_vue-loader@13.7.1@vue-loader/lib/selector?type=script&index=0!./EasyCm.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/_vue-loader@13.7.1@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-92a164f6\\\",\\\"hasScoped\\\":true,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/_vue-loader@13.7.1@vue-loader/lib/selector?type=template&index=0!./EasyCm.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-92a164f6\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/lib/EasyCm.vue\n// module id = 2\n// module chunks = 0","// style-loader: Adds some css to the DOM by adding a 55 | 56 | 57 | 58 | 59 |
60 | 61 |

{{ msg }}

62 |

在小方块上右击展示

63 |

调整网页宽高查看边界检测

64 |
    65 |
  • 66 | 67 | 最简 68 |
  • 69 |
  • 70 | 71 | 下划线 72 |
  • 73 |
  • 74 | 75 | 子层箭头 76 |
  • 77 |
  • 78 | 85 | 字体图标 86 |
  • 87 |
  • 88 | 89 | 多层菜单 90 |
  • 91 |
  • 92 | 93 | 触发点偏移 94 |
  • 95 |
  • 96 | 97 | 选项宽高 98 |
  • 99 |
  • 100 | 101 | 自定义样式 102 |
  • 103 |
  • 104 | 105 | 回调函数 106 |
  • 107 |
108 |
109 | 110 | 158 | 159 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-easycm", 3 | "description": "easy contextMenu", 4 | "version": "1.0.3", 5 | "author": "boen <1997@boenfu.cn>", 6 | "license": "MIT", 7 | "private": false, 8 | "main": "dist/vue-easycm.js", 9 | "files": [ 10 | "dist", 11 | "src" 12 | ], 13 | "scripts": { 14 | "dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot", 15 | "build": "cross-env NODE_ENV=production webpack --progress --hide-modules" 16 | }, 17 | "dependencies": { 18 | "vue": "^2.5.11" 19 | }, 20 | "keywords": [ 21 | "vue", 22 | "contextMenu" 23 | ], 24 | "browserslist": [ 25 | "> 1%", 26 | "last 2 versions", 27 | "not ie <= 8" 28 | ], 29 | "devDependencies": { 30 | "babel-core": "^6.26.0", 31 | "babel-loader": "^7.1.2", 32 | "babel-preset-env": "^1.6.0", 33 | "babel-preset-stage-3": "^6.24.1", 34 | "cross-env": "^5.0.5", 35 | "css-loader": "^0.28.7", 36 | "file-loader": "^1.1.4", 37 | "vue-loader": "^13.0.5", 38 | "vue-template-compiler": "^2.4.4", 39 | "webpack": "^3.6.0", 40 | "webpack-dev-server": "^2.9.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 58 | 59 | 77 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boenfu/vue-easycm/3f407bf6350da1d3dca8c0577126348d3efcd2e8/src/assets/logo.png -------------------------------------------------------------------------------- /src/iconfont/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAWMAAsAAAAACJAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kgYY21hcAAAAYAAAABkAAABnM7maiBnbHlmAAAB5AAAAagAAAJUvsU2dGhlYWQAAAOMAAAALwAAADYRJfvjaGhlYQAAA7wAAAAcAAAAJAfeA4VobXR4AAAD2AAAABAAAAAQD+kAAGxvY2EAAAPoAAAACgAAAAoBoADIbWF4cAAAA/QAAAAfAAAAIAETAF1uYW1lAAAEFAAAAUUAAAJtPlT+fXBvc3QAAAVcAAAALwAAAEDS1q+meJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/sU4gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDzTYW7438AQw9zA0AAUZgTJAQAnRgyaeJzFkNENwCAIRA+ljWk6ip9NB+pXR3Bi1rAH+uMEPfMELkQMADYAmVSigLwQuB66En7GEb7iZl14EmMztdr7krkkOkpkyV+WHb9J/hu96oz7mpXvu034RdOB79XqAPkDc+sQM3icjY89axRRGIXvuXfund1kdzbzvTub/ZzsXCXuECeTGUTcQJAQRVAwTSBN6sRgl8YijSBiIf4ACxGs7YMByxT+h6g/wcJmr95VRLTal5fD4f2A5xBOyI9LdsaaxCVXyHVymzwgBGIVQ4t2MJB5SlfhD7gfehaTsRyY8TBltxAOhRdkRZ6EwhQNWOhifZAVMqUSG/mE3kQWdIBWO3rojJYd9hILTdl9qu7SN/B78XJjMlZ3rm16Wd+tnNQcp+U4LyqC8wqlRsPCozCo8uqCUG95I/LPeldpD7WWjO7t1ftt5+BZftwZhVXg9BRuu2+927QjW/eTKHCdlrlUrzSjerzi4eTrYtOtdZIvRBfTWT+wj2yLLJIVsqZzWjC7CCcoU7g6x1CmkEle6kGRhXoTeKaQo0T4theUoyKn5Fxxrs5/6W6xvfN6Z/uwq+vwr32s3jPOGe5TtvXnVOt0beO/w9/28xSMKcEYplQQYvzDOCY35qQcIzHtGWMZC23C9aK0k3lw1Xf1TQACNeP5vgEYM5mL/PKCCnUk6IXxCYY6nv3ileb/CWVvfNZ4nGNgZGBgAOKd1Z1p8fw2Xxm4WRhA4Dpz9GcE/X8fCwOzE5DLwcAEEgUAKo8KNAB4nGNgZGBgbvjfwBDDwgACQJKRARWwAABHCgJtBAAAAAPpAAAEAAAABAAAAAAAAAAAdgDIASoAAHicY2BkYGBgYQhkYGUAASYg5gJCBob/YD4DABESAXEAeJxlj01OwzAQhV/6B6QSqqhgh+QFYgEo/RGrblhUavdddN+mTpsqiSPHrdQDcB6OwAk4AtyAO/BIJ5s2lsffvHljTwDc4Acejt8t95E9XDI7cg0XuBeuU38QbpBfhJto41W4Rf1N2MczpsJtdGF5g9e4YvaEd2EPHXwI13CNT+E69S/hBvlbuIk7/Aq30PHqwj7mXle4jUcv9sdWL5xeqeVBxaHJIpM5v4KZXu+Sha3S6pxrW8QmU4OgX0lTnWlb3VPs10PnIhVZk6oJqzpJjMqt2erQBRvn8lGvF4kehCblWGP+tsYCjnEFhSUOjDFCGGSIyujoO1Vm9K+xQ8Jee1Y9zed0WxTU/3OFAQL0z1xTurLSeTpPgT1fG1J1dCtuy56UNJFezUkSskJe1rZUQuoBNmVXjhF6XNGJPyhnSP8ACVpuyAAAAHicY2BigAAuBuyAhZGJkZmRhZGVgbGCLSk/LTEvnbMiM7Eyszgjv5SBAQBQOQb7AA==') format('woff'); 4 | } 5 | 6 | .iconfont { 7 | font-family:"iconfont" !important; 8 | font-size:16px; 9 | font-style:normal; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } 13 | 14 | .icon-bofang:before { content: "\e604"; } 15 | 16 | .icon-xiayishou:before { content: "\e62c"; } 17 | 18 | -------------------------------------------------------------------------------- /src/lib/EasyCm.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 180 | 181 | 265 | -------------------------------------------------------------------------------- /src/lib/index.js: -------------------------------------------------------------------------------- 1 | import EasyCm from './EasyCm.vue' 2 | const VueEasyCm = { 3 | install: function (Vue) { 4 | Vue.component('easy-cm', EasyCm) 5 | Vue.prototype.$easycm = function (e,root,tag) { 6 | e.stopPropagation() 7 | e.preventDefault() 8 | root.$emit('easyAxis',{ 9 | tag: tag, 10 | x: e.clientX, 11 | y: e.clientY 12 | }) 13 | } 14 | } 15 | } 16 | 17 | if (typeof window !== 'undefined' && window.Vue) { 18 | window.Vue.use(VueEasyCm) 19 | } 20 | 21 | export default VueEasyCm 22 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import VueEasyCm from './lib/index' 4 | Vue.use(VueEasyCm) 5 | new Vue({ 6 | el: '#app', 7 | render: h => h(App) 8 | }) 9 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var webpack = require('webpack') 3 | 4 | module.exports = { 5 | entry: './src/lib/index.js', 6 | output: { 7 | path: path.resolve(__dirname, './dist'), 8 | publicPath: '/dist/', 9 | filename: 'vue-easycm.js', 10 | library: 'VueEasyCm', 11 | libraryTarget: 'umd', 12 | umdNamedDefine: true 13 | }, 14 | module: { 15 | rules: [ 16 | { 17 | test: /\.css$/, 18 | use: [ 19 | 'vue-style-loader', 20 | 'css-loader' 21 | ], 22 | }, { 23 | test: /\.vue$/, 24 | loader: 'vue-loader', 25 | options: { 26 | loaders: { 27 | } 28 | // other vue-loader options go here 29 | } 30 | }, 31 | { 32 | test: /\.js$/, 33 | loader: 'babel-loader', 34 | exclude: /node_modules/ 35 | }, 36 | { 37 | test: /\.(png|jpg|gif|svg)$/, 38 | loader: 'file-loader', 39 | options: { 40 | name: '[name].[ext]?[hash]' 41 | } 42 | } 43 | ] 44 | }, 45 | resolve: { 46 | alias: { 47 | 'vue$': 'vue/dist/vue.esm.js' 48 | }, 49 | extensions: ['*', '.js', '.vue', '.json'] 50 | }, 51 | devServer: { 52 | historyApiFallback: true, 53 | noInfo: true, 54 | overlay: true 55 | }, 56 | performance: { 57 | hints: false 58 | }, 59 | devtool: '#eval-source-map' 60 | } 61 | 62 | if (process.env.NODE_ENV === 'production') { 63 | module.exports.devtool = '#source-map' 64 | // http://vue-loader.vuejs.org/en/workflow/production.html 65 | module.exports.plugins = (module.exports.plugins || []).concat([ 66 | new webpack.DefinePlugin({ 67 | 'process.env': { 68 | NODE_ENV: '"production"' 69 | } 70 | }), 71 | new webpack.optimize.UglifyJsPlugin({ 72 | sourceMap: true, 73 | compress: { 74 | warnings: false 75 | } 76 | }), 77 | new webpack.LoaderOptionsPlugin({ 78 | minimize: true 79 | }) 80 | ]) 81 | } 82 | --------------------------------------------------------------------------------