|
@@ -1,10 +1,12 @@
|
|
|
<template>
|
|
|
<li
|
|
|
- :class="{ 'el-submenu': true, 'is-active': active, 'is-opened': opened}"
|
|
|
- @mouseenter="handleMouseenter"
|
|
|
- @mouseleave="handleMouseleave"
|
|
|
+ :class="{
|
|
|
+ 'el-submenu': true,
|
|
|
+ 'is-active': active,
|
|
|
+ 'is-opened': opened
|
|
|
+ }"
|
|
|
>
|
|
|
- <div class="el-submenu__title" @click="handleClick">
|
|
|
+ <div class="el-submenu__title" ref="submenu-title">
|
|
|
|
|
|
<slot name="title"></slot>
|
|
|
<i :class="{
|
|
@@ -51,19 +53,33 @@
|
|
|
this.rootMenu.handleSubmenuClick(this.index, this.indexPath);
|
|
|
},
|
|
|
handleMouseenter() {
|
|
|
- if (this.rootMenu.mode === 'horizontal') {
|
|
|
- clearTimeout(this.timeout);
|
|
|
- this.timeout = setTimeout(() => {
|
|
|
- this.rootMenu.openMenu(this.index, this.indexPath);
|
|
|
- }, 300);
|
|
|
- }
|
|
|
+ clearTimeout(this.timeout);
|
|
|
+ this.timeout = setTimeout(() => {
|
|
|
+ this.rootMenu.openMenu(this.index, this.indexPath);
|
|
|
+ }, 300);
|
|
|
},
|
|
|
handleMouseleave() {
|
|
|
- if (this.rootMenu.mode === 'horizontal') {
|
|
|
- clearTimeout(this.timeout);
|
|
|
- this.timeout = setTimeout(() => {
|
|
|
- this.rootMenu.closeMenu(this.index, this.indexPath);
|
|
|
- }, 300);
|
|
|
+ clearTimeout(this.timeout);
|
|
|
+ this.timeout = setTimeout(() => {
|
|
|
+ this.rootMenu.closeMenu(this.index, this.indexPath);
|
|
|
+ }, 300);
|
|
|
+ },
|
|
|
+ initEvents() {
|
|
|
+ let {
|
|
|
+ rootMenu,
|
|
|
+ handleMouseenter,
|
|
|
+ handleMouseleave,
|
|
|
+ handleClick
|
|
|
+ } = this;
|
|
|
+ let triggerElm;
|
|
|
+
|
|
|
+ if (rootMenu.mode === 'horizontal' && rootMenu.menuTrigger === 'hover') {
|
|
|
+ triggerElm = this.$el;
|
|
|
+ triggerElm.addEventListener('mouseenter', handleMouseenter);
|
|
|
+ triggerElm.addEventListener('mouseleave', handleMouseleave);
|
|
|
+ } else {
|
|
|
+ triggerElm = this.$refs['submenu-title'];
|
|
|
+ triggerElm.addEventListener('click', handleClick);
|
|
|
}
|
|
|
}
|
|
|
},
|
|
@@ -74,6 +90,7 @@
|
|
|
this.$on('item-select', (index, indexPath) => {
|
|
|
this.active = indexPath.indexOf(this.index) !== -1;
|
|
|
});
|
|
|
+ this.initEvents();
|
|
|
}
|
|
|
};
|
|
|
</script>
|