拖拽元素时辅助线怎么精准对齐?
我在做一个可视化拖拽编辑器,元素拖动时想显示辅助线来对齐其他元素,但总是对不齐,偏差几个像素。试过用 getBoundingClientRect() 获取位置,但辅助线位置还是飘忽不定。
这是我现在计算辅助线的逻辑:
const targetRect = target.getBoundingClientRect();
const currentRect = currentElement.getBoundingClientRect();
// 水平辅助线:顶部或底部对齐
if (Math.abs(targetRect.top - currentRect.bottom) < 5) {
showGuideline('horizontal', targetRect.top);
}
是不是坐标系没统一?还是需要考虑滚动偏移?有谁做过类似功能能指点下吗?
给你一个我之前用的方案:
辅助线用 fixed 定位,然后坐标这样计算:
然后判断对齐的逻辑可以这样写:
几点提醒:
1. 阈值设为 10px 比 5px 好用,太小了对齐时很难触发
2. 辅助线元素最好直接挂在 body 下,避免被其他父元素影响定位
3. 记得在拖拽结束时隐藏辅助线
4. 如果你的编辑器容器有 transform 这种变换,可能还需要考虑容器自身的偏移
希望能帮到你,有问题再问。