mirror of
https://github.com/immich-app/immich.git
synced 2025-05-31 20:25:32 -04:00
fix: longpress triggers contextmenu (#17602)
This commit is contained in:
parent
242a559e0f
commit
5e68f8c519
@ -130,18 +130,30 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
let timer: ReturnType<typeof setTimeout>;
|
let timer: ReturnType<typeof setTimeout>;
|
||||||
const clearLongPressTimer = () => clearTimeout(timer);
|
|
||||||
|
const preventContextMenu = (evt: Event) => evt.preventDefault();
|
||||||
|
let disposeables: (() => void)[] = [];
|
||||||
|
|
||||||
|
const clearLongPressTimer = () => {
|
||||||
|
clearTimeout(timer);
|
||||||
|
for (const dispose of disposeables) {
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
disposeables = [];
|
||||||
|
};
|
||||||
|
|
||||||
let startX: number = 0;
|
let startX: number = 0;
|
||||||
let startY: number = 0;
|
let startY: number = 0;
|
||||||
function longPress(element: HTMLElement, { onLongPress }: { onLongPress: () => void }) {
|
function longPress(element: HTMLElement, { onLongPress }: { onLongPress: () => void }) {
|
||||||
let didPress = false;
|
let didPress = false;
|
||||||
const start = (evt: TouchEvent) => {
|
const start = (evt: PointerEvent) => {
|
||||||
startX = evt.changedTouches[0].clientX;
|
startX = evt.clientX;
|
||||||
startY = evt.changedTouches[0].clientY;
|
startY = evt.clientY;
|
||||||
didPress = false;
|
didPress = false;
|
||||||
timer = setTimeout(() => {
|
timer = setTimeout(() => {
|
||||||
onLongPress();
|
onLongPress();
|
||||||
|
element.addEventListener('contextmenu', preventContextMenu, { once: true });
|
||||||
|
disposeables.push(() => element.removeEventListener('contextmenu', preventContextMenu));
|
||||||
didPress = true;
|
didPress = true;
|
||||||
}, 350);
|
}, 350);
|
||||||
};
|
};
|
||||||
@ -153,13 +165,13 @@
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
};
|
};
|
||||||
element.addEventListener('click', click);
|
element.addEventListener('click', click);
|
||||||
element.addEventListener('touchstart', start, true);
|
element.addEventListener('pointerdown', start, true);
|
||||||
element.addEventListener('touchend', clearLongPressTimer, true);
|
element.addEventListener('pointerup', clearLongPressTimer, true);
|
||||||
return {
|
return {
|
||||||
destroy: () => {
|
destroy: () => {
|
||||||
element.removeEventListener('click', click);
|
element.removeEventListener('click', click);
|
||||||
element.removeEventListener('touchstart', start, true);
|
element.removeEventListener('pointerdown', start, true);
|
||||||
element.removeEventListener('touchend', clearLongPressTimer, true);
|
element.removeEventListener('pointerup', clearLongPressTimer, true);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user