|
71 | 71 | tapTime = 0, // time of the most recent tap event
|
72 | 72 | prevTap = null,
|
73 | 73 |
|
74 |
| - startOffset = { left: 0, right: 0, top: 0, bottom: 0 }, |
| 74 | + startOffset = { left: 0, right: 0, top: 0, bottom: 0 }, |
| 75 | + restrictOffset = { left: 0, right: 0, top: 0, bottom: 0 }, |
| 76 | + snapOffset = { x: 0, y: 0}, |
75 | 77 |
|
76 | 78 | tmpXY = {}, // reduce object creation in getXY()
|
77 | 79 |
|
|
2000 | 2002 | status.realX = page.x;
|
2001 | 2003 | status.realY = page.y;
|
2002 | 2004 |
|
2003 |
| - var elementOffsetX = 0, |
2004 |
| - elementOffsetY = 0; |
2005 |
| - |
2006 |
| - if (snap.elementOrigin) { |
2007 |
| - var rect = target.getRect(); |
2008 |
| - |
2009 |
| - elementOffsetX = startOffset.left + (rect.width * snap.elementOrigin.x); |
2010 |
| - elementOffsetY = startOffset.top + (rect.height * snap.elementOrigin.y); |
2011 |
| - } |
2012 |
| - |
2013 | 2005 | // change to infinite range when range is negative
|
2014 | 2006 | if (snap.range < 0) { snap.range = Infinity; }
|
2015 | 2007 |
|
|
2047 | 2039 |
|
2048 | 2040 | range = typeof anchor.range === 'number'? anchor.range: snap.range;
|
2049 | 2041 |
|
2050 |
| - dx = anchor.x - page.x + elementOffsetX; |
2051 |
| - dy = anchor.y - page.y + elementOffsetY; |
| 2042 | + dx = anchor.x - page.x + snapOffset.x; |
| 2043 | + dy = anchor.y - page.y + snapOffset.y; |
2052 | 2044 | distance = hypot(dx, dy);
|
2053 | 2045 |
|
2054 | 2046 | inRange = distance < range;
|
|
2093 | 2085 | status.dy = closest.dy;
|
2094 | 2086 | }
|
2095 | 2087 | else if (snap.mode === 'grid') {
|
2096 |
| - var gridx = Math.round((page.x - snap.gridOffset.x - elementOffsetX) / snap.grid.x), |
2097 |
| - gridy = Math.round((page.y - snap.gridOffset.y - elementOffsetY) / snap.grid.y), |
| 2088 | + var gridx = Math.round((page.x - snap.gridOffset.x - snapOffset.x) / snap.grid.x), |
| 2089 | + gridy = Math.round((page.y - snap.gridOffset.y - snapOffset.y) / snap.grid.y), |
2098 | 2090 |
|
2099 |
| - newX = gridx * snap.grid.x + snap.gridOffset.x + elementOffsetX, |
2100 |
| - newY = gridy * snap.grid.y + snap.gridOffset.y + elementOffsetY; |
| 2091 | + newX = gridx * snap.grid.x + snap.gridOffset.x + snapOffset.x, |
| 2092 | + newY = gridy * snap.grid.y + snap.gridOffset.y + snapOffset.y; |
2101 | 2093 |
|
2102 | 2094 | dx = newX - page.x;
|
2103 | 2095 | dy = newY - page.y;
|
|
2145 | 2137 | status.dy = 0;
|
2146 | 2138 | status.restricted = false;
|
2147 | 2139 |
|
2148 |
| - var elementOffset = { top: 0, left: 0, bottom: 0, right: 0}; |
2149 |
| - |
2150 |
| - if (restrict.elementRect) { |
2151 |
| - var elementRect = target.getRect(); |
2152 |
| - |
2153 |
| - elementOffset.left = startOffset.left - (elementRect.width * restrict.elementRect.left); |
2154 |
| - elementOffset.top = startOffset.top - (elementRect.height * restrict.elementRect.top); |
2155 |
| - |
2156 |
| - elementOffset.right = startOffset.right - (elementRect.width * (1 - restrict.elementRect.right)); |
2157 |
| - elementOffset.bottom = startOffset.bottom - (elementRect.height * (1 - restrict.elementRect.bottom)); |
2158 |
| - } |
2159 |
| - |
2160 | 2140 | var rect;
|
2161 | 2141 |
|
2162 | 2142 | if (restriction === 'parent') {
|
|
2189 | 2169 | }
|
2190 | 2170 | }
|
2191 | 2171 |
|
2192 |
| - status.dx = Math.max(Math.min(rect.right - elementOffset.right , page.x), rect.left + elementOffset.left) - page.x; |
2193 |
| - status.dy = Math.max(Math.min(rect.bottom - elementOffset.bottom, page.y), rect.top + elementOffset.top ) - page.y; |
| 2172 | + status.dx = Math.max(Math.min(rect.right - restrictOffset.right , page.x), rect.left + restrictOffset.left) - page.x; |
| 2173 | + status.dy = Math.max(Math.min(rect.bottom - restrictOffset.bottom, page.y), rect.top + restrictOffset.top ) - page.y; |
2194 | 2174 | status.restricted = true;
|
2195 | 2175 |
|
2196 | 2176 | return status;
|
|
2313 | 2293 | if (starting) {
|
2314 | 2294 | prevEvent = downEvent;
|
2315 | 2295 |
|
2316 |
| - var rect = target.getRect() || { left: 0, right: 0, top: 0, bottom: 0 }; |
| 2296 | + var rect = target.getRect(), |
| 2297 | + snap = target.options.snap, |
| 2298 | + restrict = target.options.restrict; |
2317 | 2299 |
|
2318 |
| - startOffset.left = startCoords.pageX - rect.left; |
2319 |
| - startOffset.top = startCoords.pageY - rect.top; |
| 2300 | + if (rect) { |
| 2301 | + startOffset.left = startCoords.pageX - rect.left; |
| 2302 | + startOffset.top = startCoords.pageY - rect.top; |
2320 | 2303 |
|
2321 |
| - startOffset.right = rect.right - startCoords.pageX; |
2322 |
| - startOffset.bottom = rect.bottom - startCoords.pageY; |
| 2304 | + startOffset.right = rect.right - startCoords.pageX; |
| 2305 | + startOffset.bottom = rect.bottom - startCoords.pageY; |
| 2306 | + } |
| 2307 | + else { |
| 2308 | + startOffset.left = startOffset.top = startOffset.right = startOffset.bottom = 0; |
| 2309 | + } |
| 2310 | + |
| 2311 | + if (rect && snap.elementOrigin) { |
| 2312 | + snapOffset.x = startOffset.left + (rect.width * snap.elementOrigin.x); |
| 2313 | + snapOffset.y = startOffset.top + (rect.height * snap.elementOrigin.y); |
| 2314 | + } |
| 2315 | + else { |
| 2316 | + snapOffset.x = snapOffset.y = 0; |
| 2317 | + } |
| 2318 | + |
| 2319 | + if (rect && restrict.elementRect) { |
| 2320 | + restrictOffset.left = startOffset.left - (rect.width * restrict.elementRect.left); |
| 2321 | + restrictOffset.top = startOffset.top - (rect.height * restrict.elementRect.top); |
| 2322 | + |
| 2323 | + restrictOffset.right = startOffset.right - (rect.width * (1 - restrict.elementRect.right)); |
| 2324 | + restrictOffset.bottom = startOffset.bottom - (rect.height * (1 - restrict.elementRect.bottom)); |
| 2325 | + } |
| 2326 | + else { |
| 2327 | + restrictOffset.left = restrictOffset.top = restrictOffset.right = restrictOffset.bottom = 0; |
| 2328 | + } |
2323 | 2329 | }
|
2324 | 2330 |
|
2325 | 2331 | if (!shouldRestrict) {
|
|
0 commit comments