@nanogiants/vue3-longpress
Version:
This package contains a Vue 3 directive which adds the `@longpress` event to an element.
48 lines (47 loc) • 1.38 kB
JavaScript
var pointerdownEvent = function(el, binding, e) {
var _a;
e.preventDefault();
var delay = (_a = binding.value) !== null && _a !== void 0 ? _a : 500;
var dir = getDir(binding);
dir.timeout = setTimeout(function() {
return el.dispatchEvent(new CustomEvent("longpress"));
}, delay);
};
var pointerupEvent = function(binding, e) {
e.preventDefault();
var dir = getDir(binding);
if (dir.timeout !== null) {
clearTimeout(dir.timeout);
}
};
var getDir = function(binding) {
return binding.dir;
};
var vLongpress = {
pointerdownEvent: function() {
return {};
},
pointerupEvent: function() {
return {};
},
timeout: null,
mounted: function(el, binding) {
var dir = getDir(binding);
dir.pointerdownEvent = function(e) {
return pointerdownEvent(el, binding, e);
};
dir.pointerupEvent = function(e) {
return pointerupEvent(binding, e);
};
el.addEventListener("pointerdown", dir.pointerdownEvent);
el.addEventListener("pointerup", dir.pointerupEvent);
el.addEventListener("pointermove", dir.pointerupEvent);
},
beforeUnmount: function(el, binding) {
var dir = getDir(binding);
el.removeEventListener("pointerdown", dir.pointerdownEvent);
el.removeEventListener("pointerup", dir.pointerupEvent);
el.removeEventListener("pointermove", dir.pointerupEvent);
}
};
export { vLongpress };