vangleer / es-drager

A draggable, resizable, rotatable component based on vue3
https://vangleer.github.io/es-drager/
336 stars 50 forks source link

框选结束以后 被选中的节点会失去selected属性 #37

Closed liangzai927 closed 7 months ago

liangzai927 commented 7 months ago

在框选节点之后 节点selected属性是true 但是没有selected属性 image

liangzai927 commented 7 months ago

在线案例的组合拆分里面也有这个bug

vangleer commented 7 months ago

selected属性不是双向绑定的,需要通过事件focus/blur重新赋值

liangzai927 commented 7 months ago

暴露出来的blur和focus方法只会返回一个true/false 在focus/blur里面直接改变item的selected属性 没有效果啊

liangzai927 commented 7 months ago

暴露出来的blur和focus方法只会返回一个true/false 在focus/blur里面直接改变item的selected属性 没有效果啊

没搞明白这两个方法是怎么用的🤦🏻‍♀️

vangleer commented 7 months ago

参考一下这个实例哈

<template>
  {{ selected }}
  <button @click.stop="onFocus">选中</button>
  <button @click.stop="onBlur">取消选中</button>
  <Drager
    :width="100"
    :height="100"
    :left="100"
    :top="100"
    :selected="selected"
    rotatable
    @focus="onFocus"
    @blur="onBlur"
  >
    按钮
  </Drager>

</template>

<script setup lang="ts">
import { ref } from 'vue'
import Drager from 'es-drager/index'

const selected = ref(false)

const onFocus = () => selected.value = true

const onBlur = () => selected.value = false
</script>
liangzai927 commented 7 months ago
index

image image 我是用的对象上的selected属性 在框选的时候会改变selected属性 会被选中 但是取消框选会触发blur方法 强请改为false

liangzai927 commented 7 months ago

https://github.com/vangleer/es-drager/assets/48548032/1bd48af3-ba46-4fed-8264-ebc918e25c74

liangzai927 commented 7 months ago

Screen-2024-03-29-140202.mp4

这个是组分与拆分的组件 框选取消后 会触发blur这个方法 被选中的样式消失了 我在blur中改变item的selected属性没有用 但是在编辑器案例中 没有这个bug 我没研究出来是什么原因 希望大佬能解答一下

vangleer commented 7 months ago

给画布阻止一下点击冒泡就好了,因为点击事件冒泡到document就会自动失去焦点

image

liangzai927 commented 7 months ago

给画布阻止一下点击冒泡就好了,因为点击事件冒泡到document就会自动失去焦点

image

感谢大佬 解决了 确实没想到是冒泡导致的🙏

vangleer commented 7 months ago

我的问题,编辑器发现的时候就改了,文档忘记更新了 😓

Hobart-C commented 4 months ago

我的问题,编辑器发现的时候就改了,文档忘记更新了 😓

还有个问题,框选完成之后,点击画布取消所有选中(看似没问题),但是将areaSelected设置为false的点击事件没有被触发,需要再点一下画布才会执行。以上这样的情况存在,所以会导致框选完成之后点击画布看似是取消了多选状态,但是依次点击drager时,还是多选状态,不会说选一个切一个

Hobart-C commented 4 months ago

给画布阻止一下点击冒泡就好了,因为点击事件冒泡到document就会自动失去焦点

image

可是你的代码里没有这个stop也没问题