SafetyScreen-ui/node_modules/@interactjs/auto-start/hold.js

67 lines
1.6 KiB
JavaScript
Raw Normal View History

2025-03-29 19:33:58 +08:00
import Interaction from "../core/Interaction.js";
import basePlugin from "./base.js";
function install(scope) {
const {
defaults
} = scope;
scope.usePlugin(basePlugin);
defaults.perAction.hold = 0;
defaults.perAction.delay = 0;
}
function getHoldDuration(interaction) {
const actionName = interaction.prepared && interaction.prepared.name;
if (!actionName) {
return null;
}
const options = interaction.interactable.options;
return options[actionName].hold || options[actionName].delay;
}
const hold = {
id: 'auto-start/hold',
install,
listeners: {
'interactions:new': ({
interaction
}) => {
interaction.autoStartHoldTimer = null;
},
'autoStart:prepared': ({
interaction
}) => {
const hold = getHoldDuration(interaction);
if (hold > 0) {
interaction.autoStartHoldTimer = setTimeout(() => {
interaction.start(interaction.prepared, interaction.interactable, interaction.element);
}, hold);
}
},
'interactions:move': ({
interaction,
duplicate
}) => {
if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {
clearTimeout(interaction.autoStartHoldTimer);
interaction.autoStartHoldTimer = null;
}
},
// prevent regular down->move autoStart
'autoStart:before-start': ({
interaction
}) => {
const holdDuration = getHoldDuration(interaction);
if (holdDuration > 0) {
interaction.prepared.name = null;
}
}
},
getHoldDuration
};
export default hold;
//# sourceMappingURL=hold.js.map