需要做一个可随意拖动的浮窗的需求

React-dnd(16.9k)

很强大的组件库,但比较原始,没有过多的封装,用起来很复杂

  • 拖拽后修改dragSource的位置需要自己写

但有问题:

  • 拖拽过程中css更改:本来被拖拽的浮窗是圆角,但在拖拽过程中border-radius会失效
  • 需要限制可拖拽的范围:设置的dropTarget为整个屏幕,会拖拽到dropTarget范围外
  • dropTarget覆盖全部窗口:dropTarget为整个屏幕时,为了保持浮窗在最上层,需要z-index设置很高,导致其他部分的交互事件都不可用了

React-beautiful-dnd(25.9k)

用于列表的拖拽,其他的场景不可用

React-rnd(2.6k)

可以resize、可拖拽的组件

  • 非常好用,封装的非常完善
  • 可以在全屏中移动,不会出屏幕外
  • 不会覆盖其他的部分
  • 拖拽时css不修改,很优雅

源码
在react-draggable上封装的一层(我笑死。。。)

React-draggable(7.2k)

也好用,反正都比dnd好用
源码
在自组件上添加style,通过transform属性移动 transform: translate(-30px, 24px); ,onMouseDown开始移动,不断计算位置信息,onMouseUp结束