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

Last change on this file since 37463 was 37463, checked in by davidb, 13 months ago

Shifting work to using interact.js

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