想用vue 做个一对多的元素碰撞,右侧三个标签可以拖拽,怎么判断拖拽一个标签跟黄色某个标签碰撞了??
方案一:直接通过drag & drop API 将黄色块变为可释放区域,蓝色块变为可拖拽元素,然后蓝色块被拖到与黄色块有交集区域的时候,dragover或dragenter回调就能知道。当然表面上你把黄色块设置为了可释放区域,实际上是可以不让他释放的。(PS: 这种方法是否能在最边缘碰撞检测到,有待实践证明)
方案二:采用楼上答主的拖拽重叠算法之类的方法计算
这个地方不需要碰撞检测,如果所有元素都是 DOM 节点的话,只需要普通的 mouseover 事件就好了。我也不建议用 <canvas>
画然后做碰撞检测,太浪费资源和时间。
9 回答1.7k 阅读✓ 已解决
6 回答1.7k 阅读
3 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
来一个简单粗暴的方法:
建立一个坐标系,每个标签可以用其左上角坐标点加自身长宽共四个属性表示:
重叠计算,用的 ts 类型清晰一些:
拖拽的标签分别和静态的标签进行重叠计算即可。