interactjs
Version:
Drag and drop, resizing and multi-touch gestures with inertia and snapping for modern browsers (and also IE9+)
49 lines (36 loc) • 1.26 kB
JavaScript
const autoStart = require('./base');
const Interaction = require('../Interaction');
autoStart.defaults.perAction.hold = 0;
autoStart.defaults.perAction.delay = 0;
Interaction.signals.on('new', function (interaction) {
interaction.autoStartHoldTimer = null;
});
autoStart.signals.on('prepared', function ({ interaction }) {
const hold = getHoldDuration(interaction);
if (hold > 0) {
interaction.autoStartHoldTimer = setTimeout(() => {
interaction.start(interaction.prepared, interaction.target, interaction.element);
}, hold);
}
});
Interaction.signals.on('move', function ({ interaction, duplicate }) {
if (interaction.pointerWasMoved && !duplicate) {
clearTimeout(interaction.autoStartHoldTimer);
}
});
// prevent regular down->move autoStart
autoStart.signals.on('before-start', function ({ interaction }) {
const hold = getHoldDuration(interaction);
if (hold > 0) {
interaction.prepared.name = null;
}
});
function getHoldDuration (interaction) {
const actionName = interaction.prepared && interaction.prepared.name;
if (!actionName) { return null; }
const options = interaction.target.options;
return options[actionName].hold || options[actionName].delay;
}
module.exports = {
getHoldDuration,
};