项目需求是让工具箱悬浮在画布
上,而我们拖拽控件生成节点是Mousedown鼠标按下
时就触发的,所以每次我们按下鼠标(拖拽或者单击)都会生成节点,这也就导致我们在工具箱单击时会在工具箱下边生成节点
写了好多方法,比如mousedown加时间戳同时开启dnd.start拖拽,等到生成节点的时候在validateNode里使用时间间隔判断啊,又或者在mousedown的时候记录一个标志,在Mouseup的时候清除一个标志,延迟多少毫秒再判断标志是否还在,如果还在,证明是拖拽事件再触发dnd.start,但是这两种方法都试了,都有些问题,最后,大佬提示,可以用如下方法实现:
继承Dnd
,重写isInsideValidArea
方法,把方法改成只要拖拽的节点不离开工具箱区域,就不会在画布上生成节点
dnd类的源码
源码里只定义了验证鼠标是否在可拖拽区域中的方法(自己分析的,反正大概就这么个意思吧哈哈哈哈,如有不对还请各位大佬温柔指正~)
protected isInsideValidArea(p: Point.PointLike) {
let targetRect: Rectangle
const targetGraph = this.targetGraph
const targetScroller = this.targetScroller
if (targetScroller) {
// 判断是否支持滚动
if (targetScroller