移动效果web/movable
所有“按下-移动-松开”交互效果的抽象底层。
基本用法
Movable
封装了指针“按下-移动-松开”的连续操作,并分别触发 moveStart
、move
、moveEnd
三个事件(但不移动元素)。
如果在 move
事件中改变元素的位置就可以实现经典的移动效果。
Movable
是移动、手势、触摸滚动等交互效果的底层实现。
<div id="elem">摸我</div>
<script>
import movable from "web/movable";
movable(elem, {
moveStart(){
console.log("移动开始");
},
move(){
console.log("移动中:", this.offsetX, this.offsetY);
},
moveEnd(){
console.log("移动结束");
}
})
</script>
另参考
- 拖动
- [[web/touchable]]
- [[web/scrollable]]
内部原理
移动交互的具体流程为:
handlePointerDown
:当鼠标(手指)按下时触发。记录startX
和startY
并开始监听鼠标(手指)松开和移动事件。init
:当鼠标(手指)按下保持delay
毫秒数或移动距离超过distance
时,认为移动开始。moveStart
:触发开始移动事件。handlePointerMove
:当鼠标(手指)移动时触发。记录endX
和endY
字段。move
:触发移动事件。handlePointerUp
:当鼠标(手指)松开时触发。uninit
:解绑鼠标(手指)松开和移动事件。moveEnd
:触发移动结束事件。
API
全局
Movable 类
表示一个可移动的对象。
字段 | 类型 | 描述 |
---|---|---|
⮞
elem
: HTMLElement
移动的元素。 |
HTMLElement
|
移动的元素。 |
⮞
delay
: number = -1
从指针按下到触发移动事件的等待毫秒数。如果为 -1 则忽略指针按下不动的操作。 |
number
|
从指针按下到触发移动事件的等待毫秒数。如果为 -1 则忽略指针按下不动的操作。 |
⮞
distance
: number = 3
允许触发移动事件的最小指针移动距离(单位:像素)。当移动距离小于这个值时忽略移动操作。 |
number
|
允许触发移动事件的最小指针移动距离(单位:像素)。当移动距离小于这个值时忽略移动操作。 |
⮞
startX
: number
获取开始移动的水平坐标(单位:像素)。 |
number
|
获取开始移动的水平坐标(单位:像素)。 |
⮞
startY
: number
获取开始移动的垂直坐标(单位:像素)。 |
number
|
获取开始移动的垂直坐标(单位:像素)。 |
⮞
endX
: number
获取当前的水平坐标(单位:像素)。 |
number
|
获取当前的水平坐标(单位:像素)。 |
⮞
endY
: number
获取当前的垂直坐标(单位:像素)。 |
number
|
获取当前的垂直坐标(单位:像素)。 |
⮞
offsetX
: number
(只读)获取移动的水平距离(单位:像素)。 |
number
|
(只读)获取移动的水平距离(单位:像素)。 |
⮞
offsetY
: number
(只读)获取移动的垂直距离(单位:像素)。 |
number
|
(只读)获取移动的垂直距离(单位:像素)。 |
⮞
Movable.current
: Movable
当前正在移动的对象。 |
Movable
|
当前正在移动的对象。 |
方法 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|
⮞
cancel(e)(e:
判断是否取消指定事件引发的移动效果。
返回值类型: 如果返回 true 则取消移动,否则允许开始移动。 说明默认地,如果是点击输入域则取消移动。 |
判断是否取消指定事件引发的移动效果。 |
||||||||
⮞
enable()():
启用移动效果。 返回值类型: |
启用移动效果。 |
||||||||
⮞
disable()():
禁用移动效果。 返回值类型: |
禁用移动效果。 |
||||||||
⮞
handlePointerDown(e)(e:
(保护的)处理指针按下事件。
返回值类型: |
(保护的)处理指针按下事件。 |
||||||||
⮞
handlePointerMove(e)(e:
(保护的)处理指针移动事件。
返回值类型: |
(保护的)处理指针移动事件。 |
||||||||
⮞
handlePointerUp(e)(e:
(保护的)处理指针松开事件。
返回值类型: |
(保护的)处理指针松开事件。 |
||||||||
⮞
init(e)(e:
(保护的)进入移动状态。
返回值类型: |
(保护的)进入移动状态。 |
||||||||
⮞
uninit(e)(e:
(保护的)退出移动状态。
返回值类型: |
(保护的)退出移动状态。 |
||||||||
⮞
moveStart(e)(e:
触发移动开始事件。
返回值类型: 如果返回 false 则忽略本次移动。 |
触发移动开始事件。 |
||||||||
⮞
move(e)(e:
触发移动事件。
返回值类型: |
触发移动事件。 |
||||||||
⮞
moveEnd(e)(e:
触发移动结束事件。
返回值类型: |
触发移动结束事件。 |