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

Last change on this file since 37466 was 37466, checked in by davidb, 14 months ago

Added in text window that can be zoomed and dragged

File size: 4.7 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 //var resize_drag_elems = document.getElementsByClassName('resize-drag')
21
22 //var resize_drag_elem = resize_drag_elems[0];
23
24 //console.log(resize_drag_elem);
25
26 interact('.resize-drag')
27 .draggable({
28 // enable inertial throwing
29 inertia: true,
30 // keep the element within the area of it's parent
31 modifiers: [
32 interact.modifiers.restrictRect({
33 restriction: 'parent',
34 endOnly: true
35 })
36 ],
37 // enable autoScroll
38 autoScroll: true,
39
40 listeners: {
41 // call this function on every dragmove event
42 move: dragMoveListener,
43
44 // call this function on every dragend event
45 end (event) {
46 var textEl = event.target.querySelector('p')
47
48 textEl && (textEl.textContent =
49 'moved a distance of ' +
50 (Math.sqrt(Math.pow(event.pageX - event.x0, 2) +
51 Math.pow(event.pageY - event.y0, 2) | 0))
52 .toFixed(2) + 'px')
53 }
54 }
55 })
56 .resizable({
57 // resize from all edges and corners
58 edges: { left: true, right: true, bottom: true, top: true },
59
60 listeners: {
61 move (event) {
62 var target = event.target
63 var x = (parseFloat(target.getAttribute('data-x')) || 0)
64 var y = (parseFloat(target.getAttribute('data-y')) || 0)
65
66 // update the element's style
67 target.style.width = event.rect.width + 'px'
68 target.style.height = event.rect.height + 'px'
69
70 // translate when resizing from top or left edges
71 x += event.deltaRect.left
72 y += event.deltaRect.top
73
74 target.style.transform = 'translate(' + x + 'px,' + y + 'px)'
75
76 target.setAttribute('data-x', x)
77 target.setAttribute('data-y', y)
78 target.textContent = Math.round(event.rect.width) + '\u00D7' + Math.round(event.rect.height)
79 }
80 },
81 modifiers: [
82 // keep the edges inside the parent
83 interact.modifiers.restrictEdges({
84 outer: 'parent'
85 }),
86
87 // minimum size
88 interact.modifiers.restrictSize({
89 min: { width: 100, height: 50 }
90 })
91 ],
92
93 inertia: true
94 });
95
96/*
97 .draggable({
98 listeners: { move: window.dragMoveListener },
99 inertia: true,
100 modifiers: [
101 interact.modifiers.restrictRect({
102 restriction: 'parent',
103 endOnly: true
104 })
105 ]
106 })
107*/
108
109
110 // this function is used later in the resizing and gesture demos
111 window.dragMoveListener = dragMoveListener
112
113
114 var $drag_and_zoom_elems = $('.drag-and-zoom');
115
116 $drag_and_zoom_elems.each(function(index) {
117
118 let this_elem = this;
119 let $this_elem = $(this_elem);
120
121 let angleScale = {
122 angle: 0,
123 scale: 1
124 }
125 let gestureArea = document.getElementById('gesture-area')
126 let scaleElement = document.getElementById('scale-element')
127 //let resetTimeout
128
129
130 //let gesture_areas_col = interact('.drag-and-zoom');
131 //console.log(gesture_areas_col);
132
133 //let gesture_area = interact(gestureArea)
134 //console.log(gesture_area);
135
136 // interact(gestureArea)
137 //gesture_area
138 //gesture_areas_col
139 interact(this_elem)
140 .gesturable({
141 listeners: {
142 start (event) {
143 angleScale.angle -= event.angle
144
145 //clearTimeout(resetTimeout)
146 //scaleElement.classList.remove('reset')
147 },
148 move (event) {
149 // document.body.appendChild(new Text(event.scale))
150 let currentAngle = event.angle + angleScale.angle
151 let currentScale = event.scale * angleScale.scale
152 //console.log(this);
153
154 //scaleElement.style.transform =
155 let this_scale_elem = $(this_elem).find('.scale-element')[0];
156
157 this_scale_elem.style.transform =
158 'rotate(' + currentAngle + 'deg)' + 'scale(' + currentScale + ')'
159
160 // uses the dragMoveListener from the draggable demo above
161 dragMoveListener(event)
162 },
163 end (event) {
164 angleScale.angle = angleScale.angle + event.angle
165 angleScale.scale = angleScale.scale * event.scale
166
167 //resetTimeout = setTimeout(reset, 1000)
168 //scaleElement.classList.add('reset')
169 }
170 }
171 })
172 .draggable({
173 inertia: true,
174 modifiers: [
175 interact.modifiers.restrictRect({
176 restriction: 'parent',
177 endOnly: true
178 })
179 ],
180 listeners: { move: dragMoveListener }
181 })
182 });
183
184
185/*
186function reset () {
187 scaleElement.style.transform = 'scale(1)'
188
189 angleScale.angle = 0
190 angleScale.scale = 1
191}
192*/
193
194
195
196});
Note: See TracBrowser for help on using the repository browser.