- 鼠标点击被拖拽的元素
- 鼠标按住不放,移动被拖拽的元素
- 鼠标松开,被拖拽的元素停留在该松开位置
- 鼠标点击被拖拽的元素。绑定
mousedown
事件- 设置当前拖拽状态为 true
- 记录当前鼠标坐标
- 记录当前被拖拽元素坐标
- 鼠标按住不放,移动被拖拽的元素。document绑定
mousemove
事件- 记录当前鼠标坐标
- 若当前拖拽状态为true,元素的位移(坐标)= 当前鼠标坐标 - 初始鼠标坐标 + 被拖拽元素坐标(开始拖拽时初始坐标)
- 鼠标松开,被拖拽的元素停留在该松开位置。document绑定
mouseup
事件- 设置当前拖拽状态为 false
- 被拖拽元素的
postion
属性须设置为relative
/absolute
- 鼠标坐标获取方式
event.clientX/event.clientY
以上实现上拖拽没问题,但拖拽范围过大。
- 获取拖拽元素和它的父元素宽高,父与子宽高两两相减,其结果为最大位移
- 若当前拖拽状态为true,真实元素的位移(坐标)= 当前鼠标坐标 - 初始鼠标坐标 + 被拖拽元素坐标(开始拖拽时初始坐标)
- 最终位移 = Math.min(最大位移坐标, Math.max( 0, 真实元素的位移(坐标))) + 'px'
总结以上功能,封装开箱即用。drag-scope-result
使用translate
替代top/left
drag-scope-translate 总结以上功能,封装开箱即用。drag-scope-translate-result
思路:每次鼠标按下时,利用this更新当前操作元素
总结以上功能,封装开箱即用。
- top drag-scope-multiple
- translate drag-scope-translate-multiple