uiik 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -0
- package/LICENSE +21 -0
- package/README.md +35 -0
- package/index.esm.js +1971 -0
- package/index.js +1995 -0
- package/package.json +60 -0
- package/types/detector.d.ts +34 -0
- package/types/draggable.d.ts +25 -0
- package/types/droppable.d.ts +30 -0
- package/types/index.d.ts +25 -0
- package/types/resizable.d.ts +19 -0
- package/types/rotatable.d.ts +23 -0
- package/types/selectable.d.ts +32 -0
- package/types/splittable.d.ts +23 -0
- package/types/types.d.ts +320 -0
- package/types/utils.d.ts +19 -0
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "uiik",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A UI interaction kit includes draggable, splittable, rotatable, selectable, etc.",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"module": "index.esm.js",
|
|
7
|
+
"types": "types/index.d.ts",
|
|
8
|
+
"author": "holyhigh2",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/holyhigh2/uii"
|
|
13
|
+
},
|
|
14
|
+
"bugs": "https://github.com/holyhigh2/uii/issues/new",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"js",
|
|
17
|
+
"dom",
|
|
18
|
+
"javascript",
|
|
19
|
+
"ui",
|
|
20
|
+
"interactions",
|
|
21
|
+
"draggable",
|
|
22
|
+
"splittable",
|
|
23
|
+
"rotatable",
|
|
24
|
+
"selectable",
|
|
25
|
+
"resizable",
|
|
26
|
+
"detector"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "rollup --config",
|
|
30
|
+
"test": "rollup --config rollup.config.test.js --watch",
|
|
31
|
+
"doc": "npx typedoc"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@holyhigh/func.js": ">=2.4"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@babel/core": "^7.12.3",
|
|
38
|
+
"@babel/eslint-parser": "^7.13",
|
|
39
|
+
"@rollup/plugin-babel": "^5.2.1",
|
|
40
|
+
"@rollup/plugin-commonjs": "^16.0.0",
|
|
41
|
+
"@rollup/plugin-eslint": "^8.0.0",
|
|
42
|
+
"@rollup/plugin-json": "^4.1.0",
|
|
43
|
+
"@rollup/plugin-node-resolve": "^10.0.0",
|
|
44
|
+
"@rollup/plugin-terser": "^0.3.0",
|
|
45
|
+
"eslint": "^7.23.0",
|
|
46
|
+
"eslint-config-google": "^0.14.0",
|
|
47
|
+
"rollup": "^2.33",
|
|
48
|
+
"rollup-plugin-banner2": "^1.0.0",
|
|
49
|
+
"rollup-plugin-clear": "2.0.7",
|
|
50
|
+
"rollup-plugin-copy": "^3.4.0",
|
|
51
|
+
"rollup-plugin-livereload": "^2.0.0",
|
|
52
|
+
"rollup-plugin-serve": "^1.1",
|
|
53
|
+
"rollup-plugin-typescript2": "0.34.1",
|
|
54
|
+
"rollup-pluginutils": "^2.8.2",
|
|
55
|
+
"tslib": "^2.4.0",
|
|
56
|
+
"typescript": "^4.8.2",
|
|
57
|
+
"typedoc": "^0.23.28",
|
|
58
|
+
"typedoc-plugin-markdown": "^3.14.0"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { CollisionData, CollisionDetectorOptions } from "./types";
|
|
2
|
+
export declare class CollisionDetector {
|
|
3
|
+
#private;
|
|
4
|
+
targetsData: Array<CollisionData>;
|
|
5
|
+
el: Element;
|
|
6
|
+
elData: CollisionData;
|
|
7
|
+
opts: Record<string, any>;
|
|
8
|
+
constructor(el: string | HTMLElement, targets: (() => Array<HTMLElement>) | string | HTMLElement | Array<HTMLElement> | NodeList | HTMLCollection, opts?: CollisionDetectorOptions);
|
|
9
|
+
/**
|
|
10
|
+
* update targets data if them changed
|
|
11
|
+
*/
|
|
12
|
+
update(): void;
|
|
13
|
+
/**
|
|
14
|
+
* detect targets and return overlaps
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
getOverlaps(): Array<HTMLElement>;
|
|
18
|
+
getOverlaps(x1: number, y1: number, x2: number, y2: number): Array<HTMLElement>;
|
|
19
|
+
/**
|
|
20
|
+
* detect targets and return inclusions
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
getInclusions(): Array<HTMLElement>;
|
|
24
|
+
getInclusions(x1: number, y1: number, x2: number, y2: number): Array<HTMLElement>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* create a detector for the el and return
|
|
28
|
+
* @param el element to be detected
|
|
29
|
+
* @param targets
|
|
30
|
+
* @param opts CollisionDetectorOptions
|
|
31
|
+
* @param opts.container a root element of targets
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
export declare function newCollisionDetector(el: string | HTMLElement, targets: (() => Array<HTMLElement>) | string | HTMLElement | Array<HTMLElement> | NodeList | HTMLCollection, opts?: CollisionDetectorOptions): CollisionDetector;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DraggableOptions, Uii } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* 用于表示一个或多个可拖动元素的定义
|
|
4
|
+
* > 可用CSS接口
|
|
5
|
+
* - .uii-draggable
|
|
6
|
+
* - .uii-draggable-handle
|
|
7
|
+
* - .uii-draggable-active
|
|
8
|
+
* - .uii-draggable-ghost
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare class Draggable extends Uii {
|
|
12
|
+
#private;
|
|
13
|
+
constructor(els: string | HTMLElement | Array<string | HTMLElement>, opts?: DraggableOptions);
|
|
14
|
+
/**
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
onOptionChanged(opts: Record<string, any>): void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* create a draggable pattern for one or more elements with opts
|
|
21
|
+
* @param els selector string / html element
|
|
22
|
+
* @param opts
|
|
23
|
+
* @returns Draggable instance
|
|
24
|
+
*/
|
|
25
|
+
export declare function newDraggable(els: string | HTMLElement | Array<string | HTMLElement>, opts?: DraggableOptions): Draggable;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DroppableOptions, Uii } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* 用于表示一个或多个可响应拖动元素的定义
|
|
4
|
+
* > 可用CSS接口
|
|
5
|
+
* - .uii-droppable
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export declare class Droppable extends Uii {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(el: string | HTMLElement | Array<string | HTMLElement>, opts?: DroppableOptions);
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
bindEvent(el: HTMLElement, opts: Record<string, any>): void;
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
active(target: HTMLElement): void;
|
|
19
|
+
/**
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
deactive(target: HTMLElement): void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Enable els to response to draggable objects
|
|
26
|
+
* @param els selector string / html element
|
|
27
|
+
* @param opts
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
export declare function newDroppable(els: string | HTMLElement | Array<string | HTMLElement>, opts?: DroppableOptions): Droppable;
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { newSplittable } from './splittable';
|
|
2
|
+
import { newResizable } from './resizable';
|
|
3
|
+
import { newDraggable } from './draggable';
|
|
4
|
+
import { newDroppable } from './droppable';
|
|
5
|
+
import { newRotatable } from './rotatable';
|
|
6
|
+
import { newSelectable } from './selectable';
|
|
7
|
+
export * from './splittable';
|
|
8
|
+
export * from './resizable';
|
|
9
|
+
export * from './draggable';
|
|
10
|
+
export * from './droppable';
|
|
11
|
+
export * from './rotatable';
|
|
12
|
+
export * from './selectable';
|
|
13
|
+
export * from './detector';
|
|
14
|
+
export * from './types';
|
|
15
|
+
export declare const VERSION: string;
|
|
16
|
+
declare const _default: {
|
|
17
|
+
VERSION: string;
|
|
18
|
+
newSplittable: typeof newSplittable;
|
|
19
|
+
newResizable: typeof newResizable;
|
|
20
|
+
newDraggable: typeof newDraggable;
|
|
21
|
+
newDroppable: typeof newDroppable;
|
|
22
|
+
newRotatable: typeof newRotatable;
|
|
23
|
+
newSelectable: typeof newSelectable;
|
|
24
|
+
};
|
|
25
|
+
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ResizableOptions, Uii } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* 用于表示一个或多个可改变尺寸元素的定义
|
|
4
|
+
* > 可用CSS接口
|
|
5
|
+
* - .uii-resizable-handle
|
|
6
|
+
* - .uii-resizable-handle-[n/s/e/w/ne/nw/se/sw]
|
|
7
|
+
* - .uii-resizable-handle-active
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export declare class Resizable extends Uii {
|
|
11
|
+
constructor(els: string | HTMLElement, opts?: ResizableOptions);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Make els resizable
|
|
15
|
+
* @param els selector string / html element
|
|
16
|
+
* @param opts
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
export declare function newResizable(els: string | HTMLElement, opts?: ResizableOptions): Resizable;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dom rotator
|
|
3
|
+
* @author holyhigh2
|
|
4
|
+
*/
|
|
5
|
+
import { RotatableOptions, Uii } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* 用于表示一个或多个可旋转元素的定义
|
|
8
|
+
* > 可用CSS接口
|
|
9
|
+
* - .uii-rotatable
|
|
10
|
+
* - .uii-rotatable-handle
|
|
11
|
+
* - .uii-rotatable-active
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
export declare class Rotatable extends Uii {
|
|
15
|
+
constructor(els: string | HTMLElement, opts?: RotatableOptions);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Make els rotatable
|
|
19
|
+
* @param els selector string / html element
|
|
20
|
+
* @param opts
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
export declare function newRotatable(els: string | HTMLElement, opts?: RotatableOptions): Rotatable;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* selector
|
|
3
|
+
* @author holyhigh2
|
|
4
|
+
*/
|
|
5
|
+
import { SelectableOptions, Uii } from "./types";
|
|
6
|
+
/**
|
|
7
|
+
* 用于表示一个元素选择器的定义
|
|
8
|
+
* > 可用CSS接口
|
|
9
|
+
* - .uii-selector
|
|
10
|
+
* - .uii-selecting
|
|
11
|
+
* - .uii-selected
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
export declare class Selectable extends Uii {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(container: string | HTMLElement, opts?: SelectableOptions);
|
|
17
|
+
/**
|
|
18
|
+
* 更新targets
|
|
19
|
+
*/
|
|
20
|
+
updateTargets(): void;
|
|
21
|
+
/**
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
onOptionChanged(): void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Add a selector into the container
|
|
28
|
+
* @param container css selector or html element
|
|
29
|
+
* @param opts
|
|
30
|
+
* @returns
|
|
31
|
+
*/
|
|
32
|
+
export declare function newSelectable(container: string | HTMLElement, opts?: SelectableOptions): Selectable;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { SplittableOptions, Uii } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* 用于表示一个或多个分割器的定义
|
|
4
|
+
* > 可用CSS接口
|
|
5
|
+
* - .uii-splittable
|
|
6
|
+
* - .uii-splittable-handle
|
|
7
|
+
* - .uii-splittable-handle-ghost
|
|
8
|
+
* - .uii-splittable-handle-active
|
|
9
|
+
* - .uii-splittable-v
|
|
10
|
+
* - .uii-splittable-h
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export declare class Splittable extends Uii {
|
|
14
|
+
#private;
|
|
15
|
+
constructor(container: string | HTMLElement, opts?: SplittableOptions);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Add one or more splittors into the container
|
|
19
|
+
* @param container css selector or html element
|
|
20
|
+
* @param opts SplittableOptions
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
export declare function newSplittable(container: string | HTMLElement, opts?: SplittableOptions): Splittable;
|
package/types/types.d.ts
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Base class for all Uii classes
|
|
3
|
+
*/
|
|
4
|
+
export declare abstract class Uii {
|
|
5
|
+
#private;
|
|
6
|
+
/**
|
|
7
|
+
* 处理过的dom元素数组
|
|
8
|
+
*/
|
|
9
|
+
protected ele: Array<HTMLElement>;
|
|
10
|
+
/**
|
|
11
|
+
* 当前uii对象的选项
|
|
12
|
+
*/
|
|
13
|
+
protected opts: Record<string, any>;
|
|
14
|
+
protected enabled: boolean;
|
|
15
|
+
constructor(ele: string | HTMLElement | NodeList | HTMLCollection | Array<string | HTMLElement>, opts?: Record<string, any>);
|
|
16
|
+
/**
|
|
17
|
+
* 销毁uii对象,包括卸载事件、清空元素等
|
|
18
|
+
*/
|
|
19
|
+
destroy(): void;
|
|
20
|
+
/**
|
|
21
|
+
* 注册事件,以便在{@link destroy}方法中卸载
|
|
22
|
+
* @param el dom元素
|
|
23
|
+
* @param event 事件名
|
|
24
|
+
* @param hook 回调函数
|
|
25
|
+
* @param useCapture 默认false
|
|
26
|
+
*/
|
|
27
|
+
protected registerEvent(el: HTMLElement, event: string, hook: Function, useCapture?: boolean): void;
|
|
28
|
+
/**
|
|
29
|
+
* 禁用uii实例,禁用后的dom不会响应事件
|
|
30
|
+
*/
|
|
31
|
+
disable(): void;
|
|
32
|
+
/**
|
|
33
|
+
* 启用uii实例
|
|
34
|
+
*/
|
|
35
|
+
enable(): void;
|
|
36
|
+
/**
|
|
37
|
+
* 获取uii实例选项对象
|
|
38
|
+
*/
|
|
39
|
+
getOption(): Record<string, any>;
|
|
40
|
+
/**
|
|
41
|
+
* 一次设置多个选项值。触发`onOptionChanged`
|
|
42
|
+
* @param options
|
|
43
|
+
*/
|
|
44
|
+
setOptions(options?: Record<string, any>): void;
|
|
45
|
+
/**
|
|
46
|
+
* 设置指定name的选项值。触发`onOptionChanged`
|
|
47
|
+
* @param name
|
|
48
|
+
* @param value
|
|
49
|
+
*/
|
|
50
|
+
setOption(name: string, value: any): void;
|
|
51
|
+
/**
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
protected onOptionChanged(opts?: Record<string, any>): void;
|
|
55
|
+
}
|
|
56
|
+
export type ResizableOptions = {
|
|
57
|
+
/**
|
|
58
|
+
* handle的宽高,默认8
|
|
59
|
+
*/
|
|
60
|
+
handleSize?: number;
|
|
61
|
+
/**
|
|
62
|
+
* 拖动元素的最小size,如果是数组,表示 [width,height]
|
|
63
|
+
*/
|
|
64
|
+
minSize?: number | Array<number>;
|
|
65
|
+
/**
|
|
66
|
+
* 拖动元素的最大size,如果是数组,表示 [width,height]
|
|
67
|
+
*/
|
|
68
|
+
maxSize?: number | Array<number>;
|
|
69
|
+
/**
|
|
70
|
+
* resizable方向,默认[n,s,e,w,ne,nw,se,sw]
|
|
71
|
+
*/
|
|
72
|
+
dir?: string[];
|
|
73
|
+
/**
|
|
74
|
+
* handle所在元素的位置偏移,负数向内,正数向外。默认0
|
|
75
|
+
*/
|
|
76
|
+
offset?: number;
|
|
77
|
+
/**
|
|
78
|
+
* 宽高比,小数
|
|
79
|
+
*/
|
|
80
|
+
aspectRatio?: number;
|
|
81
|
+
/**
|
|
82
|
+
* 开启ghost模式后,拖动元素时会自动创建元素副本并拖动副本,当拖动结束后,副本销毁并且元素移动到最后位置。默认false
|
|
83
|
+
*/
|
|
84
|
+
ghost?: boolean | Function;
|
|
85
|
+
ghostClass?: string;
|
|
86
|
+
onStart?: (w: number, h: number) => void;
|
|
87
|
+
onResize?: (w: number, h: number) => void;
|
|
88
|
+
onEnd?: (w: number, h: number) => void;
|
|
89
|
+
onClone?: (cloneDom: HTMLElement, ev: MouseEvent) => void;
|
|
90
|
+
};
|
|
91
|
+
export type SplittableOptions = {
|
|
92
|
+
/**
|
|
93
|
+
* handle宽/高,默认10
|
|
94
|
+
*/
|
|
95
|
+
handleSize?: number;
|
|
96
|
+
/**
|
|
97
|
+
* 最小区域,如果是数组可以按顺序定义分割区域,默认0
|
|
98
|
+
*/
|
|
99
|
+
minSize?: number | number[];
|
|
100
|
+
/**
|
|
101
|
+
* 单边模式,只修改单侧元素size,用于flex布局。可选值为 start/end
|
|
102
|
+
*/
|
|
103
|
+
oneSideMode?: 'start' | 'end';
|
|
104
|
+
/**
|
|
105
|
+
* 粘性吸附,如果是数组可以按顺序定义分割区域。设置minSize后生效
|
|
106
|
+
*/
|
|
107
|
+
sticky?: boolean | boolean[];
|
|
108
|
+
/**
|
|
109
|
+
* 自动创建的handle是否在元素内部插入,默认false
|
|
110
|
+
*/
|
|
111
|
+
inside?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* 开启ghost模式后,拖动元素时会自动创建元素副本并拖动副本,当拖动结束后,副本销毁且元素移动到最后位置。默认false
|
|
114
|
+
*/
|
|
115
|
+
ghost?: boolean;
|
|
116
|
+
ghostClass?: string;
|
|
117
|
+
/**
|
|
118
|
+
* 自定义handle选择器,多个使用空格分隔。handle元素可以是与分割元素平级或在分割元素内
|
|
119
|
+
*/
|
|
120
|
+
handle?: string;
|
|
121
|
+
onStart?: (size1: number, size2: number) => void;
|
|
122
|
+
onSplit?: (size1: number, size2: number) => void;
|
|
123
|
+
onEnd?: (size1: number, size2: number) => void;
|
|
124
|
+
onSticky?: (size1: number, size2: number, position: 'start' | 'end' | 'none') => void;
|
|
125
|
+
onClone?: (cloneDom: HTMLElement, ev: MouseEvent) => void;
|
|
126
|
+
};
|
|
127
|
+
export type DraggableOptions = {
|
|
128
|
+
/**
|
|
129
|
+
* 限制活动范围,默认false
|
|
130
|
+
*/
|
|
131
|
+
container?: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* 拖动起始阈值,默认0
|
|
134
|
+
*/
|
|
135
|
+
threshold?: number;
|
|
136
|
+
/**
|
|
137
|
+
* 实际响应拖动的元素选择器,字符串
|
|
138
|
+
*/
|
|
139
|
+
handle?: string;
|
|
140
|
+
/**
|
|
141
|
+
* 禁止触发元素的css选择器
|
|
142
|
+
*/
|
|
143
|
+
filter?: string;
|
|
144
|
+
/**
|
|
145
|
+
* 拖动目标,dom/selector数组,用于拖动交互事件
|
|
146
|
+
*/
|
|
147
|
+
droppable?: (() => NodeList | HTMLCollection | HTMLElement[]) | string | HTMLElement | HTMLElement[];
|
|
148
|
+
/**
|
|
149
|
+
* 开启ghost模式后,拖动元素时会自动创建元素副本并拖动副本,当拖动结束后,副本销毁并且元素移动到最后位置。默认false,支持函数返回副本元素
|
|
150
|
+
*/
|
|
151
|
+
ghost?: ((el: HTMLElement) => HTMLElement) | boolean;
|
|
152
|
+
ghostClass?: string;
|
|
153
|
+
/**
|
|
154
|
+
* 传递v/h可实现单向拖动。默认''
|
|
155
|
+
*/
|
|
156
|
+
direction?: 'v' | 'h';
|
|
157
|
+
/**
|
|
158
|
+
* 是否在鼠标到达容器边缘时自动滚动,默认true
|
|
159
|
+
*/
|
|
160
|
+
scroll?: boolean;
|
|
161
|
+
/**
|
|
162
|
+
* 滚动速度,默认10
|
|
163
|
+
*/
|
|
164
|
+
scrollSpeed?: number;
|
|
165
|
+
/**
|
|
166
|
+
* 拖动时元素的zIndex
|
|
167
|
+
*/
|
|
168
|
+
zIndex?: number;
|
|
169
|
+
/**
|
|
170
|
+
* 可将不同的拖动元素编为一组,拖动时会自动管理zIndex
|
|
171
|
+
*/
|
|
172
|
+
group?: string;
|
|
173
|
+
/**
|
|
174
|
+
* 拖动时应用的class样式,多个使用空格分开
|
|
175
|
+
*/
|
|
176
|
+
classes?: string;
|
|
177
|
+
/**
|
|
178
|
+
* 拖动元素可自动吸附的目标元素选择器。字符串
|
|
179
|
+
*/
|
|
180
|
+
snap?: string;
|
|
181
|
+
snapOptions?: {
|
|
182
|
+
/**
|
|
183
|
+
* 吸附元素的移动误差,默认10
|
|
184
|
+
*/
|
|
185
|
+
tolerance: number;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* 拖动时元素左上角距离指针的距离,支持百分比及负数
|
|
189
|
+
*/
|
|
190
|
+
cursorAt?: {
|
|
191
|
+
left: number | string;
|
|
192
|
+
top: number | string;
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* 可定义拖动时不同状态下的指针,默认move
|
|
196
|
+
*/
|
|
197
|
+
cursor?: {
|
|
198
|
+
default?: string;
|
|
199
|
+
active?: string;
|
|
200
|
+
over?: string;
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* 网格拖动模式,每次移动指定的网格大小。数字或数字数组
|
|
204
|
+
*/
|
|
205
|
+
grid?: number | number[];
|
|
206
|
+
/**
|
|
207
|
+
* 拖动类型标识,用于droppable识别交互类型
|
|
208
|
+
*/
|
|
209
|
+
type?: string;
|
|
210
|
+
onStart?: (dragDom: HTMLElement, ev: MouseEvent) => void;
|
|
211
|
+
/**
|
|
212
|
+
* 拖动中调用,返回false阻止dom移动
|
|
213
|
+
* @param dragDom
|
|
214
|
+
* @param ev
|
|
215
|
+
* @param offsetX
|
|
216
|
+
* @param offsetY
|
|
217
|
+
* @returns
|
|
218
|
+
*/
|
|
219
|
+
onDrag?: (dragDom: HTMLElement, ev: MouseEvent, offsetX: number, offsetY: number, x: number, y: number) => (boolean | void);
|
|
220
|
+
/**
|
|
221
|
+
* 拖动结束后调用,返回false阻止ghost模式下的dom移动
|
|
222
|
+
* @param dragDom
|
|
223
|
+
* @param ev
|
|
224
|
+
* @returns
|
|
225
|
+
*/
|
|
226
|
+
onEnd?: (dragDom: HTMLElement, ev: MouseEvent) => (boolean | void);
|
|
227
|
+
onClone?: (cloneDom: HTMLElement, ev: MouseEvent) => void;
|
|
228
|
+
onSnap?: (el: HTMLElement, targetH: HTMLElement, targetV: HTMLElement, hDir: string, vDir: string) => void;
|
|
229
|
+
};
|
|
230
|
+
export type DroppableOptions = {
|
|
231
|
+
/**
|
|
232
|
+
* 当accepts的draggable对象开始拖动时,自动设置该样式。多个样式使用空格分隔
|
|
233
|
+
*/
|
|
234
|
+
activeClass?: string;
|
|
235
|
+
/**
|
|
236
|
+
* 当accepts的draggable对象拖动到droppable元素上时,自动设置该样式。多个样式使用空格分隔
|
|
237
|
+
*/
|
|
238
|
+
hoverClass?: string;
|
|
239
|
+
/**
|
|
240
|
+
* 定义哪些draggable元素进行交互。如果是字符串,支持不同Draggable对象进行编组
|
|
241
|
+
*/
|
|
242
|
+
accepts?: ((ele: Array<HTMLElement>, draggable: HTMLElement) => boolean) | string;
|
|
243
|
+
/**
|
|
244
|
+
* 当accepts的draggable对象开始拖动时触发
|
|
245
|
+
* @param draggable
|
|
246
|
+
* @param ele
|
|
247
|
+
* @returns
|
|
248
|
+
*/
|
|
249
|
+
onActive?: (draggable: HTMLElement, ele: Array<HTMLElement>) => void;
|
|
250
|
+
onEnter?: (el: HTMLElement, ev: MouseEvent) => void;
|
|
251
|
+
onOver?: (el: HTMLElement, ev: MouseEvent) => void;
|
|
252
|
+
onLeave?: (el: HTMLElement, ev: MouseEvent) => void;
|
|
253
|
+
onDrop?: (el: HTMLElement, ev: MouseEvent) => void;
|
|
254
|
+
/**
|
|
255
|
+
* 当accepts的draggable对象结束拖动时触发
|
|
256
|
+
* @param draggable
|
|
257
|
+
* @param ele
|
|
258
|
+
* @returns
|
|
259
|
+
*/
|
|
260
|
+
onDeactive?: (draggable: HTMLElement, ele: Array<HTMLElement>) => void;
|
|
261
|
+
};
|
|
262
|
+
export type RotatableOptions = {
|
|
263
|
+
/**
|
|
264
|
+
* 可定义拖动时不同状态下的指针,默认crosshair
|
|
265
|
+
*/
|
|
266
|
+
cursor?: {
|
|
267
|
+
default?: string;
|
|
268
|
+
active?: string;
|
|
269
|
+
};
|
|
270
|
+
onStart?: (deg: number) => {};
|
|
271
|
+
onRotate?: (deg: number) => {};
|
|
272
|
+
onEnd?: (deg: number) => {};
|
|
273
|
+
};
|
|
274
|
+
export type SelectableOptions = {
|
|
275
|
+
/**
|
|
276
|
+
* 选择器样式字符串,多个使用空格分隔
|
|
277
|
+
*/
|
|
278
|
+
class?: string;
|
|
279
|
+
/**
|
|
280
|
+
* 选择器拖动进行中,被选中元素应用的样式字符串,多个使用空格分隔
|
|
281
|
+
*/
|
|
282
|
+
selectingClass?: string;
|
|
283
|
+
/**
|
|
284
|
+
* 选择器拖动结束后,被选中元素应用的样式字符串,多个使用空格分隔
|
|
285
|
+
*/
|
|
286
|
+
selectedClass?: string;
|
|
287
|
+
/**
|
|
288
|
+
* 容器中可选择的元素。可以是选择器字符串或返回元素数组的函数
|
|
289
|
+
*/
|
|
290
|
+
targets?: (() => NodeList | HTMLCollection | HTMLElement[]) | string;
|
|
291
|
+
onStart?: (target: HTMLElement) => void;
|
|
292
|
+
onSelect?: (selection: HTMLElement[]) => void;
|
|
293
|
+
onEnd?: (selection: HTMLElement[]) => void;
|
|
294
|
+
/**
|
|
295
|
+
* 选择模式,默认overlap
|
|
296
|
+
*/
|
|
297
|
+
mode?: 'overlap' | 'inclusion';
|
|
298
|
+
/**
|
|
299
|
+
* 是否在鼠标到达容器边缘时自动滚动,默认true
|
|
300
|
+
*/
|
|
301
|
+
scroll?: boolean;
|
|
302
|
+
/**
|
|
303
|
+
* 滚动速度,默认10
|
|
304
|
+
*/
|
|
305
|
+
scrollSpeed?: number;
|
|
306
|
+
/**
|
|
307
|
+
* 禁止触发元素的css选择器或校验函数,函数返回true表示需要过滤
|
|
308
|
+
*/
|
|
309
|
+
filter?: ((el: HTMLElement) => boolean) | string;
|
|
310
|
+
};
|
|
311
|
+
export type CollisionDetectorOptions = {
|
|
312
|
+
container?: Element;
|
|
313
|
+
};
|
|
314
|
+
export type CollisionData = {
|
|
315
|
+
x1: number;
|
|
316
|
+
y1: number;
|
|
317
|
+
x2: number;
|
|
318
|
+
y2: number;
|
|
319
|
+
el?: HTMLElement;
|
|
320
|
+
};
|
package/types/utils.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 工具包
|
|
3
|
+
* @author holyhigh2
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 获取child相对于parent的offset信息。含border宽度
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
export declare function getOffset(child: HTMLElement, parent?: HTMLElement): {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 边缘检测最小内部边距
|
|
15
|
+
*/
|
|
16
|
+
export declare const EDGE_THRESHOLD = 5;
|
|
17
|
+
export declare const DRAGGING_RULE = "body * { pointer-events: none; }";
|
|
18
|
+
export declare function lockPage(): void;
|
|
19
|
+
export declare function unlockPage(): void;
|