!36 [inula]<bugfix> 解决 mouseover 重复触发 mouseEnter 事件问题
Merge pull request !36 from 涂旭辉/master
This commit is contained in:
commit
5d89a7744a
|
@ -146,7 +146,7 @@ function triggerInulaEvents(
|
||||||
|
|
||||||
let mouseEnterListeners: ListenerUnitList = [];
|
let mouseEnterListeners: ListenerUnitList = [];
|
||||||
if (inulaEventToNativeMap.get('onMouseEnter')!.includes(nativeEvtName)) {
|
if (inulaEventToNativeMap.get('onMouseEnter')!.includes(nativeEvtName)) {
|
||||||
mouseEnterListeners = getMouseEnterListeners(nativeEvtName, vNode, nativeEvent, target);
|
mouseEnterListeners = getMouseEnterListeners(nativeEvtName, vNode, nativeEvent as MouseEvent, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
let changeEvents: ListenerUnitList = [];
|
let changeEvents: ListenerUnitList = [];
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* See the Mulan PSL v2 for more details.
|
* See the Mulan PSL v2 for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { getNearestVNode } from '../dom/DOMInternalKeys';
|
import { getNearestVNode, getVNode } from '../dom/DOMInternalKeys';
|
||||||
import { WrappedEvent } from './EventWrapper';
|
import { WrappedEvent } from './EventWrapper';
|
||||||
import { VNode } from '../renderer/vnode/VNode';
|
import { VNode } from '../renderer/vnode/VNode';
|
||||||
import { AnyNativeEvent, ListenerUnitList } from './Types';
|
import { AnyNativeEvent, ListenerUnitList } from './Types';
|
||||||
|
@ -87,12 +87,29 @@ function getEndpointVNode(
|
||||||
return [fromVNode, toVNode];
|
return [fromVNode, toVNode];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkIsInulaNode(related: HTMLElement): boolean {
|
||||||
|
if (getVNode(related) || getNearestVNode(related)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
export function getMouseEnterListeners(
|
export function getMouseEnterListeners(
|
||||||
domEventName: string,
|
domEventName: string,
|
||||||
targetInst: null | VNode,
|
targetInst: null | VNode,
|
||||||
nativeEvent: AnyNativeEvent,
|
nativeEvent: MouseEvent,
|
||||||
nativeEventTarget: null | EventTarget
|
nativeEventTarget: null | EventTarget
|
||||||
): ListenerUnitList {
|
): ListenerUnitList {
|
||||||
|
|
||||||
|
if (domEventName === 'mouseover') {
|
||||||
|
// 如果 related 节点是 openInula 框架管理的,那么在 out 事件节点已经触发过 mouseEnter 或者 mouseLeave 事件了,不需要 over 事件再次触发
|
||||||
|
// IE 通过 fromElement 属性获取失去焦点的 DOM 节点
|
||||||
|
const related = nativeEvent.relatedTarget || (nativeEvent as any).fromElemnt;
|
||||||
|
if (related && checkIsInulaNode(related)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 获取起点和终点的VNode
|
// 获取起点和终点的VNode
|
||||||
const [fromVNode, toVNode] = getEndpointVNode(domEventName, targetInst, nativeEvent);
|
const [fromVNode, toVNode] = getEndpointVNode(domEventName, targetInst, nativeEvent);
|
||||||
if (fromVNode === toVNode) {
|
if (fromVNode === toVNode) {
|
||||||
|
|
Loading…
Reference in New Issue