Files
FHC-Core/public/js/directives/dragClick.js
T
2025-09-11 13:13:57 +02:00

54 lines
1.1 KiB
JavaScript

import { bindDragEnterLeave } from '../helpers/DragAndDrop.js';
export default {
mounted(el, binding) {
const delay = parseInt(binding.arg) || 300;
let timeout = null;
function startCountdown() {
timeout = window.setTimeout(binding.value, delay);
}
function stopCountdown() {
if (timeout)
window.clearTimeout(timeout);
timeout = null;
}
let lastTarget;
let lastX;
let lastY;
function onDragOver(evt) {
if (lastX != evt.offsetX || lastY != evt.offsetY || lastTarget != evt.target) {
// moved
lastTarget = evt.target;
lastX = evt.offsetX;
lastY = evt.offsetY;
stopCountdown();
startCountdown();
}
}
function onEnter(evt) {
lastTarget = evt.target;
lastX = evt.offsetX;
lastY = evt.offsetY;
el.addEventListener('dragover', onDragOver);
startCountdown();
}
function onLeave() {
stopCountdown();
el.removeEventListener('dragover', onDragOver);
}
el.fhcDragClickCleanup = bindDragEnterLeave(el, onEnter, onLeave);
},
beforeUnmount(el) {
el.fhcDragClickCleanup();
delete el.fhcDragClickCleanup;
}
}