1 |
|
---|
2 | function dragMoveListener (event) {
|
---|
3 | var target = event.target
|
---|
4 | // keep the dragged position in the data-x/data-y attributes
|
---|
5 | var x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx
|
---|
6 | var y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy
|
---|
7 |
|
---|
8 | // translate the element
|
---|
9 | target.style.transform = 'translate(' + x + 'px, ' + y + 'px)'
|
---|
10 |
|
---|
11 | // update the posiion attributes
|
---|
12 | target.setAttribute('data-x', x)
|
---|
13 | target.setAttribute('data-y', y)
|
---|
14 | }
|
---|
15 |
|
---|
16 |
|
---|
17 | $(document).ready(function() {
|
---|
18 |
|
---|
19 |
|
---|
20 | interact('.resize-drag')
|
---|
21 | .draggable({
|
---|
22 | // enable inertial throwing
|
---|
23 | inertia: true,
|
---|
24 | // keep the element within the area of it's parent
|
---|
25 | modifiers: [
|
---|
26 | interact.modifiers.restrictRect({
|
---|
27 | restriction: 'parent',
|
---|
28 | endOnly: true
|
---|
29 | })
|
---|
30 | ],
|
---|
31 | // enable autoScroll
|
---|
32 | autoScroll: true,
|
---|
33 |
|
---|
34 | listeners: {
|
---|
35 | // call this function on every dragmove event
|
---|
36 | move: dragMoveListener,
|
---|
37 |
|
---|
38 | // call this function on every dragend event
|
---|
39 | end (event) {
|
---|
40 | //var textEl = event.target.querySelector('p')
|
---|
41 | var textEl = $(event.target).find('.interact-info-bar')[0];
|
---|
42 |
|
---|
43 | textEl && (textEl.textContent =
|
---|
44 | 'Moved a distance of: ' +
|
---|
45 | (Math.sqrt(Math.pow(event.pageX - event.x0, 2) +
|
---|
46 | Math.pow(event.pageY - event.y0, 2) | 0))
|
---|
47 | .toFixed(0) + ' pixels')
|
---|
48 | }
|
---|
49 | }
|
---|
50 | })
|
---|
51 | .resizable({
|
---|
52 | // resize from all edges and corners
|
---|
53 | edges: { left: true, right: true, bottom: true, top: true },
|
---|
54 |
|
---|
55 | listeners: {
|
---|
56 | move (event) {
|
---|
57 | var target = event.target
|
---|
58 | var x = (parseFloat(target.getAttribute('data-x')) || 0)
|
---|
59 | var y = (parseFloat(target.getAttribute('data-y')) || 0)
|
---|
60 |
|
---|
61 | // update the element's style
|
---|
62 | target.style.width = event.rect.width + 'px'
|
---|
63 | target.style.height = event.rect.height + 'px'
|
---|
64 |
|
---|
65 | // translate when resizing from top or left edges
|
---|
66 | x += event.deltaRect.left
|
---|
67 | y += event.deltaRect.top
|
---|
68 |
|
---|
69 | target.style.transform = 'translate(' + x + 'px,' + y + 'px)'
|
---|
70 |
|
---|
71 | target.setAttribute('data-x', x)
|
---|
72 | target.setAttribute('data-y', y)
|
---|
73 |
|
---|
74 | var textEl = $(event.target).find('.interact-info-bar')[0];
|
---|
75 | textEl.textContent = "Resized to: " + Math.round(event.rect.width) + '\u00D7' + Math.round(event.rect.height) + " pixels"
|
---|
76 | }
|
---|
77 | },
|
---|
78 | modifiers: [
|
---|
79 | // keep the edges inside the parent
|
---|
80 | interact.modifiers.restrictEdges({
|
---|
81 | outer: 'parent'
|
---|
82 | }),
|
---|
83 |
|
---|
84 | // minimum size
|
---|
85 | interact.modifiers.restrictSize({
|
---|
86 | min: { width: 100, height: 50 }
|
---|
87 | })
|
---|
88 | ],
|
---|
89 |
|
---|
90 | inertia: true
|
---|
91 | });
|
---|
92 |
|
---|
93 | /*
|
---|
94 | .draggable({
|
---|
95 | listeners: { move: window.dragMoveListener },
|
---|
96 | inertia: true,
|
---|
97 | modifiers: [
|
---|
98 | interact.modifiers.restrictRect({
|
---|
99 | restriction: 'parent',
|
---|
100 | endOnly: true
|
---|
101 | })
|
---|
102 | ]
|
---|
103 | })
|
---|
104 | */
|
---|
105 |
|
---|
106 |
|
---|
107 | // this function is used later in the resizing and gesture demos
|
---|
108 | window.dragMoveListener = dragMoveListener
|
---|
109 |
|
---|
110 |
|
---|
111 | var $drag_and_zoom_elems = $('.drag-and-zoom');
|
---|
112 |
|
---|
113 | $drag_and_zoom_elems.each(function(index) {
|
---|
114 |
|
---|
115 | let this_elem = this;
|
---|
116 | let $this_elem = $(this_elem);
|
---|
117 |
|
---|
118 | let angleScale = {
|
---|
119 | angle: 0,
|
---|
120 | scale: 1
|
---|
121 | }
|
---|
122 | let gestureArea = document.getElementById('gesture-area')
|
---|
123 | let scaleElement = document.getElementById('scale-element')
|
---|
124 | //let resetTimeout
|
---|
125 |
|
---|
126 |
|
---|
127 | //let gesture_areas_col = interact('.drag-and-zoom');
|
---|
128 | //console.log(gesture_areas_col);
|
---|
129 |
|
---|
130 | //let gesture_area = interact(gestureArea)
|
---|
131 | //console.log(gesture_area);
|
---|
132 |
|
---|
133 | // interact(gestureArea)
|
---|
134 | //gesture_area
|
---|
135 | //gesture_areas_col
|
---|
136 | interact(this_elem)
|
---|
137 | .gesturable({
|
---|
138 | listeners: {
|
---|
139 | start (event) {
|
---|
140 | angleScale.angle -= event.angle
|
---|
141 |
|
---|
142 | //clearTimeout(resetTimeout)
|
---|
143 | //scaleElement.classList.remove('reset')
|
---|
144 | },
|
---|
145 | move (event) {
|
---|
146 | // document.body.appendChild(new Text(event.scale))
|
---|
147 | let currentAngle = event.angle + angleScale.angle
|
---|
148 | let currentScale = event.scale * angleScale.scale
|
---|
149 | //console.log(this);
|
---|
150 |
|
---|
151 | //scaleElement.style.transform =
|
---|
152 | let this_scale_elem = $(this_elem).find('.scale-element')[0];
|
---|
153 |
|
---|
154 | this_scale_elem.style.transform =
|
---|
155 | 'rotate(' + currentAngle + 'deg)' + 'scale(' + currentScale + ')'
|
---|
156 |
|
---|
157 | // uses the dragMoveListener from the draggable demo above
|
---|
158 | dragMoveListener(event)
|
---|
159 | },
|
---|
160 | end (event) {
|
---|
161 | angleScale.angle = angleScale.angle + event.angle
|
---|
162 | angleScale.scale = angleScale.scale * event.scale
|
---|
163 |
|
---|
164 | //resetTimeout = setTimeout(reset, 1000)
|
---|
165 | //scaleElement.classList.add('reset')
|
---|
166 | }
|
---|
167 | }
|
---|
168 | })
|
---|
169 |
|
---|
170 | .draggable({
|
---|
171 | inertia: true,
|
---|
172 | modifiers: [
|
---|
173 | interact.modifiers.restrictRect({
|
---|
174 | restriction: 'parent',
|
---|
175 | endOnly: true
|
---|
176 | })
|
---|
177 | ],
|
---|
178 | listeners: { move: dragMoveListener }
|
---|
179 | })
|
---|
180 |
|
---|
181 | /*
|
---|
182 |
|
---|
183 | .draggable({
|
---|
184 | // enable inertial throwing
|
---|
185 | inertia: true,
|
---|
186 | // keep the element within the area of it's parent
|
---|
187 | modifiers: [
|
---|
188 | interact.modifiers.restrictRect({
|
---|
189 | restriction: 'parent',
|
---|
190 | endOnly: true
|
---|
191 | })
|
---|
192 | ],
|
---|
193 | // enable autoScroll
|
---|
194 | autoScroll: true,
|
---|
195 |
|
---|
196 | listeners: {
|
---|
197 | // call this function on every dragmove event
|
---|
198 | move: dragMoveListener,
|
---|
199 |
|
---|
200 | // call this function on every dragend event
|
---|
201 | end (event) {
|
---|
202 | var textEl = event.target.querySelector('p')
|
---|
203 |
|
---|
204 | textEl && (textEl.textContent =
|
---|
205 | 'moved a distance of ' +
|
---|
206 | (Math.sqrt(Math.pow(event.pageX - event.x0, 2) +
|
---|
207 | Math.pow(event.pageY - event.y0, 2) | 0))
|
---|
208 | .toFixed(2) + 'px')
|
---|
209 | }
|
---|
210 | }
|
---|
211 | })
|
---|
212 |
|
---|
213 | .resizable({
|
---|
214 | // resize from all edges and corners
|
---|
215 | edges: { left: true, right: true, bottom: true, top: true },
|
---|
216 |
|
---|
217 | listeners: {
|
---|
218 | move (event) {
|
---|
219 | var target = event.target;
|
---|
220 | var x = (parseFloat(target.getAttribute('data-x')) || 0)
|
---|
221 | var y = (parseFloat(target.getAttribute('data-y')) || 0)
|
---|
222 |
|
---|
223 | // update the element's style
|
---|
224 | target.style.width = event.rect.width + 'px'
|
---|
225 | target.style.height = event.rect.height + 'px'
|
---|
226 |
|
---|
227 | // translate when resizing from top or left edges
|
---|
228 | x += event.deltaRect.left
|
---|
229 | y += event.deltaRect.top
|
---|
230 |
|
---|
231 | target.style.transform = 'translate(' + x + 'px,' + y + 'px)'
|
---|
232 |
|
---|
233 | target.setAttribute('data-x', x)
|
---|
234 | target.setAttribute('data-y', y)
|
---|
235 | target.textContent = Math.round(event.rect.width) + '\u00D7' + Math.round(event.rect.height)
|
---|
236 | }
|
---|
237 | },
|
---|
238 | modifiers: [
|
---|
239 | // keep the edges inside the parent
|
---|
240 | interact.modifiers.restrictEdges({
|
---|
241 | outer: 'parent'
|
---|
242 | }),
|
---|
243 |
|
---|
244 | // minimum size
|
---|
245 | interact.modifiers.restrictSize({
|
---|
246 | min: { width: 100, height: 50 }
|
---|
247 | })
|
---|
248 | ],
|
---|
249 |
|
---|
250 | inertia: true
|
---|
251 | });
|
---|
252 |
|
---|
253 | */
|
---|
254 | });
|
---|
255 |
|
---|
256 |
|
---|
257 | /*
|
---|
258 | function reset () {
|
---|
259 | scaleElement.style.transform = 'scale(1)'
|
---|
260 |
|
---|
261 | angleScale.angle = 0
|
---|
262 | angleScale.scale = 1
|
---|
263 | }
|
---|
264 | */
|
---|
265 |
|
---|
266 |
|
---|
267 |
|
---|
268 | });
|
---|