Files
FHC-Core/public/js/directives/dragClick.js
T

61 lines
1.3 KiB
JavaScript

import { bindDragEnterLeave } from '../helpers/DragAndDrop.js';
import { enableDragDropTouch } from "../../../vendor/drag-drop-touch-js/dragdroptouch/dist/drag-drop-touch.esm.min.js";
if (!document.dragDropTouchActive) {
enableDragDropTouch();
document.dragDropTouchActive = true;
}
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;
}
}