source: gs3-extensions/tabletop-dl/trunk/tabletop-interact.js@ 37534

Last change on this file since 37534 was 37467, checked in by davidb, 15 months ago

Control bar now slides out from left

File size: 6.5 KB
Line 
1
2function 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/*
258function reset () {
259 scaleElement.style.transform = 'scale(1)'
260
261 angleScale.angle = 0
262 angleScale.scale = 1
263}
264*/
265
266
267
268});
Note: See TracBrowser for help on using the repository browser.