Teal TealUI

移动效果web/movable

所有“按下-移动-松开”交互效果的抽象底层。

基本用法
内部原理
API
全局
Movable 类

基本用法

Movable 封装了指针“按下-移动-松开”的连续操作,并分别触发 moveStartmovemoveEnd 三个事件(但不移动元素)。

如果在 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]]

内部原理

移动交互的具体流程为:

  1. handlePointerDown:当鼠标(手指)按下时触发。记录 startXstartY 并开始监听鼠标(手指)松开和移动事件。
  2. init:当鼠标(手指)按下保持 delay 毫秒数或移动距离超过 distance 时,认为移动开始。
  3. moveStart:触发开始移动事件。
  4. handlePointerMove:当鼠标(手指)移动时触发。记录 endXendY 字段。
  5. move:触发移动事件。
  6. handlePointerUp:当鼠标(手指)松开时触发。
  7. uninit:解绑鼠标(手指)松开和移动事件。
  8. moveEnd:触发移动结束事件。

API

全局

函数 描述
movable(elem, ...)(elem:HTMLElement, options?:Partial<Movable>):Movable

创建一个可移动对象。

参数 类型 描述 默认值
elem* HTMLElement
options Partial<Movable>

返回值

类型:Movable

返回一个移动对象。

创建一个可移动对象。

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:MouseEvent):boolean

判断是否取消指定事件引发的移动效果。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:boolean

如果返回 true 则取消移动,否则允许开始移动。

说明

默认地,如果是点击输入域则取消移动。

判断是否取消指定事件引发的移动效果。

enable()():void

启用移动效果。

返回值

类型:void

启用移动效果。

disable()():void

禁用移动效果。

返回值

类型:void

禁用移动效果。

handlePointerDown(e)(e:MouseEvent):void

(保护的)处理指针按下事件。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:void

(保护的)处理指针按下事件。

handlePointerMove(e)(e:MouseEvent):void

(保护的)处理指针移动事件。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:void

(保护的)处理指针移动事件。

handlePointerUp(e)(e:MouseEvent):void

(保护的)处理指针松开事件。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:void

(保护的)处理指针松开事件。

init(e)(e:MouseEvent):void

(保护的)进入移动状态。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:void

(保护的)进入移动状态。

uninit(e)(e:MouseEvent):void

(保护的)退出移动状态。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:void

(保护的)退出移动状态。

moveStart(e)(e:MouseEvent):boolean | void

触发移动开始事件。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:boolean | void

如果返回 false 则忽略本次移动。

触发移动开始事件。

move(e)(e:MouseEvent):void

触发移动事件。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:void

触发移动事件。

moveEnd(e)(e:MouseEvent):void

触发移动结束事件。

参数 类型 描述 默认值
e* MouseEvent

返回值

类型:void

触发移动结束事件。