grid 栅格布局
flex 布局
场景:figma 的 auto layout
canvas 自由布局
block 布局
mouse
事件而不是 drag
事件,通常是出于以下几个技术和用户体验的考虑:
drag
事件本身的实现较为复杂。它通常涉及到更多的状态管理和交互细节,如拖拽开始(dragstart
)、拖拽结束(dragend
)、拖拽过程中(drag
)等。这些事件需要对元素的动态位置、样式以及与其他组件的互动进行精确控制。与其依赖于这些复杂的事件处理机制,选择 mouse
事件能够更简洁地实现拖拽功能。mouse
事件(如 mousedown
, mousemove
, mouseup
)可以让开发者对拖拽过程中的各个细节有更精确的控制。例如,可以在鼠标按下时开始记录拖拽的起点,在鼠标移动时动态更新拖拽对象的位置,在鼠标松开时完成放置。drag
事件通常会有一定的限制,比如对拖拽的元素的默认行为处理和浏览器的优化,开发者可能需要通过更多的代码来重写或修改这些行为。而 mouse
事件能让开发者完全控制拖拽的各个步骤,确保用户交互流畅且符合预期。mouse
事件通常会带来更好的性能优化。在拖拽过程中,mousemove
事件的触发频率较高,开发者可以有针对性地进行性能优化, 例如通过节流(throttling
)或防抖(debouncing
)来减少不必要的 DOM
更新。drag
事件本身可能会导致频繁的重绘和重排,尤其是在拖拽过程中需要频繁更新元素的位置和状态时,性能开销可能较大。相比之下, mouse
事件可以让开发者更有针对性地控制哪些元素需要更新,哪些可以跳过,优化性能表现。drag
事件的表现可能会有所不同,尤其是在触摸设备和桌面设备之间的差异。 mouse
事件通常具有更广泛的兼容性,并且行为在不同浏览器之间更为一致。mouse
事件可以避免一些 drag
事件带来的潜在问题,比如拖拽过程中不容易捕捉到的细节或特殊行为。mouse
事件可以实现更直观、流畅的拖拽体验,例如在拖拽开始时,通过鼠标按下事件获取用户意图,在拖动过程中动态展示拖拽反馈,用户释放鼠标时再放置元素。drag
事件更多的是基于浏览器内置的拖拽操作,它可能不如使用 mouse
事件时那样灵活,无法很好地满足低代码平台要求的自定义交互需求。样式 token、样式消费