Skip to content

Commit 363d39c

Browse files
committed
Add [action]Start functions and setActiveDrops
1 parent d5a6062 commit 363d39c

File tree

1 file changed

+96
-77
lines changed

1 file changed

+96
-77
lines changed

interact.js

Lines changed: 96 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -334,23 +334,28 @@
334334
actions = {
335335
drag: {
336336
cursor : 'move',
337-
moveListener: dragMove
337+
start: dragStart,
338+
move: dragMove
338339
},
339340
resizex: {
340341
cursor : 'e-resize',
341-
moveListener: resizeMove
342+
start: resizeStart,
343+
move: resizeMove
342344
},
343345
resizey: {
344346
cursor : 's-resize',
345-
moveListener: resizeMove
347+
start: resizeStart,
348+
move: resizeMove
346349
},
347350
resizexy: {
348351
cursor : 'se-resize',
349-
moveListener: resizeMove
352+
start: resizeStart,
353+
move: resizeMove
350354
},
351355
gesture: {
352356
cursor : '',
353-
moveListener: gestureMove
357+
start: gestureStart,
358+
move: gestureMove
354359
}
355360
},
356361

@@ -1202,23 +1207,27 @@
12021207
return index;
12031208
}
12041209

1205-
function getDrop (event, dragElement, setActive) {
1206-
var validDrops = [];
1210+
// Collect a new set of possible drops and save them in activeDrops.
1211+
// setActiveDrops should always be called when a drag has just started or a
1212+
// drag event happens while dynamicDrop is true
1213+
function setActiveDrops (dragElement) {
1214+
// get dropzones and their elements that could recieve the draggable
1215+
var possibleDrops = collectDrops(event, dragElement, true);
12071216

1208-
// If setActive is true a new set of possible drops will be
1209-
// collected and saved in activeDrops. setActive should always be
1210-
// true when a drag has just started or dynamicDrop is true
1211-
if ((setActive = setActive || dynamicDrop)) {
1212-
// get dropzones and their elements that could recieve the draggable
1213-
var possibleDrops = collectDrops(event, dragElement, setActive);
1217+
activeDrops.dropzones = possibleDrops.dropzones;
1218+
activeDrops.elements = possibleDrops.elements;
1219+
activeDrops.rects = [];
12141220

1215-
activeDrops.dropzones = possibleDrops.dropzones;
1216-
activeDrops.elements = possibleDrops.elements;
1217-
activeDrops.rects = [];
1221+
for (var i = 0; i < activeDrops.dropzones.length; i++) {
1222+
activeDrops.rects[i] = activeDrops.dropzones[i].getRect(activeDrops.elements[i]);
1223+
}
1224+
}
12181225

1219-
for (var i = 0; i < activeDrops.dropzones.length; i++) {
1220-
activeDrops.rects[i] = activeDrops.dropzones[i].getRect(activeDrops.elements[i]);
1221-
}
1226+
function getDrop (event, dragElement) {
1227+
var validDrops = [];
1228+
1229+
if (dynamicDrop) {
1230+
setActiveDrops(dragElement);
12221231
}
12231232

12241233
// collect all dropzones and their elements which qualify for a drop
@@ -2281,7 +2290,11 @@
22812290
setRestriction(event);
22822291
}
22832292

2284-
actions[prepared].moveListener(event);
2293+
if (starting) {
2294+
actions[prepared].start(event);
2295+
}
2296+
2297+
actions[prepared].move(event);
22852298
}
22862299
}
22872300
// if no snap, always move
@@ -2290,7 +2303,11 @@
22902303
setRestriction(event);
22912304
}
22922305

2293-
actions[prepared].moveListener(event);
2306+
if (starting) {
2307+
actions[prepared].start(event);
2308+
}
2309+
2310+
actions[prepared].move(event);
22942311
}
22952312
}
22962313
}
@@ -2391,36 +2408,36 @@
23912408
return;
23922409
}
23932410

2411+
function dragStart (event) {
2412+
var dragEvent = new InteractEvent(downEvent, 'drag', 'start');
23942413

2395-
function dragMove (event) {
2396-
checkAndPreventDefault(event, target);
2397-
2398-
var starting = !dragging,
2399-
dragEvent;
2414+
dragging = true;
24002415

2401-
if (starting) {
2402-
dragEvent = new InteractEvent(downEvent, 'drag', 'start');
2403-
dragging = true;
2416+
target.fire(dragEvent);
24042417

2405-
target.fire(dragEvent);
2418+
// reset active dropzones
2419+
activeDrops.dropzones = [];
2420+
activeDrops.elements = [];
2421+
activeDrops.rects = [];
24062422

2407-
// reset active dropzones
2408-
activeDrops.dropzones = [];
2409-
activeDrops.elements = [];
2410-
activeDrops.rects = [];
2423+
prevEvent = dragEvent;
24112424

2412-
prevEvent = dragEvent;
2425+
if (!dynamicDrop) {
2426+
setActiveDrops(target._element);
2427+
}
24132428

2414-
// set snapping for the next move event
2415-
if (target.options.snapEnabled && !target.options.snap.endOnly) {
2416-
setSnapping(event);
2417-
}
2429+
// set snapping for the next move event
2430+
if (target.options.snapEnabled && !target.options.snap.endOnly) {
2431+
setSnapping(event);
24182432
}
2433+
}
24192434

2420-
dragEvent = new InteractEvent(event, 'drag', 'move');
2435+
function dragMove (event) {
2436+
checkAndPreventDefault(event, target);
24212437

2422-
var draggableElement = target._element,
2423-
drop = getDrop(dragEvent, draggableElement, starting);
2438+
var dragEvent = new InteractEvent(event, 'drag', 'move'),
2439+
draggableElement = target._element,
2440+
drop = getDrop(dragEvent, draggableElement);
24242441

24252442
dropTarget = drop.dropzone;
24262443
dropElement = drop.element;
@@ -2429,7 +2446,7 @@
24292446
// restored after dropChecks
24302447
target._element = draggableElement;
24312448

2432-
var dropEvents = getDropEvents(event, dragEvent, starting);
2449+
var dropEvents = getDropEvents(event, dragEvent);
24332450

24342451
target.fire(dragEvent);
24352452

@@ -2445,61 +2462,63 @@
24452462
prevEvent = dragEvent;
24462463
}
24472464

2448-
function resizeMove (event) {
2449-
checkAndPreventDefault(event, target);
2450-
2451-
var resizeEvent;
2465+
function resizeStart (event) {
2466+
var resizeEvent = new InteractEvent(downEvent, 'resize', 'start');
24522467

2453-
if (!resizing) {
2454-
resizeEvent = new InteractEvent(downEvent, 'resize', 'start');
2455-
target.fire(resizeEvent);
2468+
target.fire(resizeEvent);
24562469

2457-
target.fire(resizeEvent);
2458-
resizing = true;
2470+
target.fire(resizeEvent);
2471+
resizing = true;
24592472

2460-
prevEvent = resizeEvent;
2473+
prevEvent = resizeEvent;
24612474

2462-
// set snapping for the next move event
2463-
if (target.options.snapEnabled && !target.options.snap.endOnly) {
2464-
setSnapping(event);
2465-
}
2475+
// set snapping for the next move event
2476+
if (target.options.snapEnabled && !target.options.snap.endOnly) {
2477+
setSnapping(event);
24662478
}
2479+
}
2480+
2481+
function resizeMove (event) {
2482+
checkAndPreventDefault(event, target);
2483+
2484+
var resizeEvent;
24672485

24682486
resizeEvent = new InteractEvent(event, 'resize', 'move');
24692487
target.fire(resizeEvent);
24702488

24712489
prevEvent = resizeEvent;
24722490
}
24732491

2474-
function gestureMove (event) {
2475-
if ((!event.touches || event.touches.length < 2) && !PointerEvent) {
2476-
return;
2477-
}
2478-
2479-
checkAndPreventDefault(event, target);
2492+
function gestureStart (event) {
2493+
var gestureEvent = new InteractEvent(downEvent, 'gesture', 'start');
24802494

2481-
var gestureEvent;
2495+
gestureEvent.ds = 0;
24822496

2483-
if (!gesturing) {
2484-
gestureEvent = new InteractEvent(downEvent, 'gesture', 'start');
2485-
gestureEvent.ds = 0;
2497+
gesture.startDistance = gesture.prevDistance = gestureEvent.distance;
2498+
gesture.startAngle = gesture.prevAngle = gestureEvent.angle;
2499+
gesture.scale = 1;
24862500

2487-
gesture.startDistance = gesture.prevDistance = gestureEvent.distance;
2488-
gesture.startAngle = gesture.prevAngle = gestureEvent.angle;
2489-
gesture.scale = 1;
2501+
gesturing = true;
24902502

2491-
gesturing = true;
2503+
target.fire(gestureEvent);
24922504

2493-
target.fire(gestureEvent);
2505+
prevEvent = gestureEvent;
24942506

2495-
prevEvent = gestureEvent;
2507+
// set snapping for the next move event
2508+
if (target.options.snapEnabled && !target.options.snap.endOnly) {
2509+
setSnapping(event);
2510+
}
2511+
}
24962512

2497-
// set snapping for the next move event
2498-
if (target.options.snapEnabled && !target.options.snap.endOnly) {
2499-
setSnapping(event);
2500-
}
2513+
function gestureMove (event) {
2514+
if ((!event.touches || event.touches.length < 2) && !PointerEvent) {
2515+
return;
25012516
}
25022517

2518+
checkAndPreventDefault(event, target);
2519+
2520+
var gestureEvent;
2521+
25032522
gestureEvent = new InteractEvent(event, 'gesture', 'move');
25042523
gestureEvent.ds = gestureEvent.scale - gesture.scale;
25052524

0 commit comments

Comments
 (0)