想要实现拖拽效果,可以用@dragstart和 @mousedown两个方法,但是真要使用时,用哪一个呢?具体请看以下两者的区别。
@dragstart使用场景:
- 有明确的拖拽区域与界限
- 拖拽灵活度要求不高
- 拖拽时有明确的数据传递需求
drag推拽事件配置:
发生在拖动元素上的事件
-
@dragstart:拖拽开始事件,可绑定于被拖拽元素上;
-
@dragend:拖拽结束事件,可绑定于被拖拽元素上;
-
@drag:拖拽过程中一直触发;
事件名 触发时机 触发次数 dragstart 当拖动开始时触发一次 1 drag 拖动开始后反复触发 n dragend 拖动结束后触发一次 1
发生在目标元素上的事件
-
@dragover:拖拽持续移动事件,建议绑定于可拖放区域(下方灰色块);
-
@dragenter:进入拖放区域,建议绑定于可拖放区域(下方灰色块),该事件仅在进入拖放区域时触发,在其内部移动时不触发,离开某一可拖放区域后再进入时会再次触发;
事件名 触发时机 触发次数 dragenter 当拖动元素进入目标时触发一次 1 dragover 当拖动元素在目标元素范围内时反复触发 n drop 拖动元素在目标元素内释放时(在设置了dropover事件的前提下) 1
@mousedown使用场景:
- 要有顺畅的拖拽体验
- 没有固定的拖拽区域
- 不需要传递数据
mousedown推拽事件配置:@mousedown,@mousemove,@mouseup
判断到底使用@dragstart还是使用@mousedown其实很简单,使用@dragstart需要明确是否有被拖拽到的目标范围,比如从一个方块拖到另一个方块范围去。
举个例子:假如我有一个推拽对象需要在整个页面拖动,选择@dragstart还是@mousedown?
答案:@mousedown。全局拖动并不是两个方块之间拖动的关系,用@dragstart无法定位推拽对象是否已经触达被拖动到的目标范围,毕竟全局拖动的话从拖动开始,拖拽对象就已经在里面了。
接下来你是否好区分何时使用@mousedown何时使用@dragstart了呢?