|
@@ -139,6 +139,29 @@ export const useInteractiveAreas = ({
|
|
|
let dragging = false;
|
|
|
enter && enter();
|
|
|
|
|
|
+ const upHandler = (ev: MouseEvent) => {
|
|
|
+ if (downed) {
|
|
|
+ mode.del(Mode.draging);
|
|
|
+ }
|
|
|
+ downed = false;
|
|
|
+ if (!dragging) return;
|
|
|
+
|
|
|
+ if (can.dragMode) {
|
|
|
+ const position = getOffset(ev, dom);
|
|
|
+ messages.value[pushNdx]![1] = beforeHandler
|
|
|
+ ? beforeHandler(position)
|
|
|
+ : position;
|
|
|
+ }
|
|
|
+
|
|
|
+ prevEv = null
|
|
|
+ pushNdx = -1;
|
|
|
+ pushed = false;
|
|
|
+ downed = false;
|
|
|
+ dragging = false;
|
|
|
+ singleDone.value = true;
|
|
|
+ };
|
|
|
+
|
|
|
+ let prevEv: any
|
|
|
return mergeFuns(
|
|
|
listener(dom, "pointerdown", (ev) => {
|
|
|
if (!can.dragMode) return;
|
|
@@ -155,9 +178,14 @@ export const useInteractiveAreas = ({
|
|
|
}),
|
|
|
listener(document.documentElement, "pointermove", (ev) => {
|
|
|
if (!can.dragMode) return;
|
|
|
+ if (ev.buttons <= 0) {
|
|
|
+ prevEv && upHandler(prevEv);
|
|
|
+ return;
|
|
|
+ }
|
|
|
const end = getOffset(ev, dom);
|
|
|
const point = beforeHandler ? beforeHandler(end) : end;
|
|
|
|
|
|
+ prevEv = ev
|
|
|
if (downed) {
|
|
|
if (pushed) {
|
|
|
messages.value[pushNdx]![1] = point;
|
|
@@ -172,26 +200,7 @@ export const useInteractiveAreas = ({
|
|
|
tempArea = [point] as unknown as Area;
|
|
|
}
|
|
|
}),
|
|
|
- listener(document.documentElement, "pointerup", (ev) => {
|
|
|
- if (downed) {
|
|
|
- mode.del(Mode.draging);
|
|
|
- }
|
|
|
- downed = false;
|
|
|
- if (!dragging) return;
|
|
|
-
|
|
|
- if (can.dragMode) {
|
|
|
- const position = getOffset(ev, dom);
|
|
|
- messages.value[pushNdx]![1] = beforeHandler
|
|
|
- ? beforeHandler(position)
|
|
|
- : position;
|
|
|
- }
|
|
|
-
|
|
|
- pushNdx = -1;
|
|
|
- pushed = false;
|
|
|
- downed = false;
|
|
|
- dragging = false;
|
|
|
- singleDone.value = true;
|
|
|
- })
|
|
|
+ listener(document.documentElement, "pointerup", upHandler)
|
|
|
);
|
|
|
};
|
|
|
|