流程设计器中节点拖拽后位置偏移怎么解决?
我在用 HTML5 做一个简单的流程设计器,节点用 div 表示,加了 draggable=”true” 实现拖拽。但每次拖完松手,节点都会突然往下或往右偏移一段距离,感觉像是 offset 计算错了。
试过在 dragend 里手动设置 left/top,但还是对不准鼠标落点。是不是得用 getBoundingClientRect() 配合 clientX/Y 手动算?求指点!
<div class="node" draggable="true" style="position: absolute; left: 100px; top: 80px; width: 120px; height: 40px; background: #eee; border: 1px solid #999;">
审批节点
</div>
draggable="true"原生拖拽,自己监听mousedown、mousemove、mouseup手动算位移。原生 drag 事件的clientX/Y是鼠标位置,但left/top是元素左上角,中间差了个鼠标点击位置的偏移量,而且拖拽过程中浏览器还会加个半透明 ghost 元素导致位置错乱。下面给个最简实现:
dragstart里记下鼠标相对节点的偏移量,拖动时实时更新lefttop,别用draggable="true"那套,自己监听mousedownmousemovemouseup: