mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2025-06-23 02:15:10 +08:00
fix: 在tree上增加tabindex来监听focus事件,完善组件树多选体验
This commit is contained in:
parent
db91b3e6c6
commit
5ae32f0792
@ -1,5 +1,4 @@
|
|||||||
<template>
|
<template>
|
||||||
<div ref="layerPanel" style="height: 100%">
|
|
||||||
<TMagicScrollbar class="magic-editor-layer-panel">
|
<TMagicScrollbar class="magic-editor-layer-panel">
|
||||||
<slot name="layer-panel-header"></slot>
|
<slot name="layer-panel-header"></slot>
|
||||||
|
|
||||||
@ -15,6 +14,7 @@
|
|||||||
|
|
||||||
<TMagicTree
|
<TMagicTree
|
||||||
v-if="values.length"
|
v-if="values.length"
|
||||||
|
tabindex="-1"
|
||||||
class="magic-editor-layer-tree"
|
class="magic-editor-layer-tree"
|
||||||
ref="tree"
|
ref="tree"
|
||||||
node-key="id"
|
node-key="id"
|
||||||
@ -40,6 +40,8 @@
|
|||||||
@check="multiClickHandler"
|
@check="multiClickHandler"
|
||||||
@mousedown="toggleClickFlag"
|
@mousedown="toggleClickFlag"
|
||||||
@mouseup="toggleClickFlag"
|
@mouseup="toggleClickFlag"
|
||||||
|
@mouseenter="mouseenterHandler"
|
||||||
|
@mouseleave="mouseleaveHandler"
|
||||||
>
|
>
|
||||||
<template #default="{ node, data }">
|
<template #default="{ node, data }">
|
||||||
<div
|
<div
|
||||||
@ -61,7 +63,6 @@
|
|||||||
<LayerMenu ref="menu" :layer-content-menu="layerContentMenu"></LayerMenu>
|
<LayerMenu ref="menu" :layer-content-menu="layerContentMenu"></LayerMenu>
|
||||||
</Teleport>
|
</Teleport>
|
||||||
</TMagicScrollbar>
|
</TMagicScrollbar>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup name="MEditorLayerPanel">
|
<script lang="ts" setup name="MEditorLayerPanel">
|
||||||
@ -263,24 +264,19 @@ watch([selectedIds, tree], async () => {
|
|||||||
setTreeKeyStatus();
|
setTreeKeyStatus();
|
||||||
});
|
});
|
||||||
|
|
||||||
const layerPanel = ref<HTMLDivElement>();
|
|
||||||
const mouseenterHandler = () => {
|
const mouseenterHandler = () => {
|
||||||
layerPanel.value?.focus();
|
tree.value?.$el.focus();
|
||||||
};
|
};
|
||||||
|
|
||||||
const mouseleaveHandler = () => {
|
const mouseleaveHandler = () => {
|
||||||
layerPanel.value?.blur();
|
tree.value?.$el.blur();
|
||||||
// 如果鼠标移出监听范围,且当前只选中了一个,置为单选模式(修复按住ctrl不放但鼠标移出的情况)
|
isMultiSelectStatus.value = false;
|
||||||
if (selectedIds.value.length === 1) isMultiSelectStatus.value = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let keycon: KeyController;
|
let keycon: KeyController;
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
layerPanel.value?.addEventListener('mouseenter', mouseenterHandler);
|
keycon = new KeyController(tree.value?.$el);
|
||||||
layerPanel.value?.addEventListener('mouseleave', mouseleaveHandler);
|
|
||||||
|
|
||||||
keycon = new KeyController(layerPanel.value);
|
|
||||||
const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());
|
const isMac = /mac os x/.test(navigator.userAgent.toLowerCase());
|
||||||
const ctrl = isMac ? 'meta' : 'ctrl';
|
const ctrl = isMac ? 'meta' : 'ctrl';
|
||||||
|
|
||||||
@ -289,9 +285,6 @@ onMounted(() => {
|
|||||||
e.inputEvent.preventDefault();
|
e.inputEvent.preventDefault();
|
||||||
isMultiSelectStatus.value = true;
|
isMultiSelectStatus.value = true;
|
||||||
})
|
})
|
||||||
.on('blur', () => {
|
|
||||||
isMultiSelectStatus.value = false;
|
|
||||||
})
|
|
||||||
.keyup(ctrl, (e) => {
|
.keyup(ctrl, (e) => {
|
||||||
e.inputEvent.preventDefault();
|
e.inputEvent.preventDefault();
|
||||||
isMultiSelectStatus.value = false;
|
isMultiSelectStatus.value = false;
|
||||||
@ -299,8 +292,6 @@ onMounted(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
layerPanel.value?.removeEventListener('mouseenter', mouseenterHandler);
|
|
||||||
layerPanel.value?.removeEventListener('mouseleave', mouseleaveHandler);
|
|
||||||
keycon.destroy();
|
keycon.destroy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user