Changeset 37538
- Timestamp:
- 2023-03-18T00:09:16+13:00 (6 days ago)
- Location:
- gs3-extensions/tabletop-dl/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
gs3-extensions/tabletop-dl/trunk/tabletop-interact.js
r37467 r37538 1 1 2 function dragMoveListener (event) { 2 function dragMoveListener(event) 3 { 3 4 var target = event.target 4 5 // keep the dragged position in the data-x/data-y attributes … … 14 15 } 15 16 16 17 function getCoreDraggableOptions() 18 { 19 let core_draggable_options = { 20 21 listeners: { move: dragMoveListener }, 22 23 modifiers: [ 24 interact.modifiers.restrictRect({ 25 restriction: 'parent', 26 endOnly: true 27 }) 28 ], 29 30 inertia: { 31 resistance: 6, 32 //minSpeed: 20, 33 //endSpeed: 10, 34 smoothEndDuration: 500, 35 allowResume: true 36 } 37 }; 38 39 return core_draggable_options; 40 } 41 42 function getCoreResizableOptions() 43 { 44 let core_resizable_options = { 45 46 edges: { left: true, right: true, bottom: true, top: true }, 47 48 listeners: { 49 move (event) { 50 var target = event.target 51 var x = (parseFloat(target.getAttribute('data-x')) || 0) 52 var y = (parseFloat(target.getAttribute('data-y')) || 0) 53 54 // update the element's style 55 target.style.width = event.rect.width + 'px' 56 target.style.height = event.rect.height + 'px' 57 58 // translate when resizing from top or left edges 59 x += event.deltaRect.left 60 y += event.deltaRect.top 61 62 target.style.transform = 'translate(' + x + 'px,' + y + 'px)' 63 64 target.setAttribute('data-x', x) 65 target.setAttribute('data-y', y) 66 67 // var textEl = $(event.target).find('.interact-info-bar')[0]; 68 // textEl.textContent = "Resized to: " + Math.round(event.rect.width) + '\u00D7' + Math.round(event.rect.height) + " pixels" 69 } 70 }, 71 72 modifiers: [ 73 // keep the edges inside the parent 74 interact.modifiers.restrictEdges({ 75 outer: 'parent' 76 }), 77 78 // minimum size 79 interact.modifiers.restrictSize({ 80 min: { width: 100, height: 50 } 81 }) 82 ], 83 84 85 inertia: { 86 resistance: 6, 87 //minSpeed: 20, 88 //endSpeed: 10, 89 smoothEndDuration: 500, 90 allowResume: true 91 } 92 }; 93 94 return core_resizable_options; 95 96 } 97 98 99 function getCoreGesturableOptions(elem,angleScale) 100 { 101 let core_gesturable_options = { 102 103 listeners: { 104 start (event) { 105 angleScale.angle -= event.angle; 106 }, 107 move (event) { 108 let currentAngle = event.angle + angleScale.angle; 109 let currentScale = event.scale * angleScale.scale; 110 111 let scale_elem = $(elem).find('.scale-element')[0]; 112 113 scale_elem.style.transform = 114 'rotate(' + currentAngle + 'deg)' + 'scale(' + currentScale + ')'; 115 116 dragMoveListener(event); 117 }, 118 end (event) { 119 angleScale.angle = angleScale.angle + event.angle; 120 angleScale.scale = angleScale.scale * event.scale; 121 } 122 } 123 }; 124 125 return core_gesturable_options; 126 } 127 128 129 17 130 $(document).ready(function() { 18 131 132 let draggable_options = getCoreDraggableOptions(); 133 let resizable_options = getCoreResizableOptions(); 134 135 draggable_options.autoScroll =true; 19 136 20 137 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 138 .draggable(draggable_options) 139 .resizable(resizable_options) 140 141 // still needed?? 142 //window.dragMoveListener = dragMoveListener 109 143 110 144 … … 114 148 115 149 let this_elem = this; 116 let $this_elem = $(this_elem); 117 150 151 /* 152 let draggable_options = getCoreDraggableOptions(); 118 153 let angleScale = { 119 154 angle: 0, 120 155 scale: 1 121 156 } 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 157 158 */ 159 160 let this_angle_scale = { 161 angle: 0, 162 scale: 1 163 } 164 165 166 let gdraggable_options = getCoreDraggableOptions(); 167 let gesturable_options = getCoreGesturableOptions(this_elem,this_angle_scale); 168 169 interact(this_elem) 170 .gesturable(gesturable_options) 171 .draggable(gdraggable_options); 172 173 /* 136 174 interact(this_elem) 137 175 .gesturable({ 138 176 listeners: { 139 177 start (event) { 140 angleScale.angle -= event.angle 141 142 //clearTimeout(resetTimeout) 143 //scaleElement.classList.remove('reset') 178 angleScale.angle -= event.angle 144 179 }, 145 180 move (event) { 146 // document.body.appendChild(new Text(event.scale))147 181 let currentAngle = event.angle + angleScale.angle 148 182 let currentScale = event.scale * angleScale.scale 149 //console.log(this); 150 151 //scaleElement.style.transform = 183 152 184 let this_scale_elem = $(this_elem).find('.scale-element')[0]; 153 185 … … 155 187 'rotate(' + currentAngle + 'deg)' + 'scale(' + currentScale + ')' 156 188 157 // uses the dragMoveListener from the draggable demo above158 189 dragMoveListener(event) 159 190 }, 160 191 end (event) { 161 192 angleScale.angle = angleScale.angle + event.angle 162 angleScale.scale = angleScale.scale * event.scale 163 164 //resetTimeout = setTimeout(reset, 1000) 165 //scaleElement.classList.add('reset') 193 angleScale.scale = angleScale.scale * event.scale 166 194 } 167 195 } 168 196 }) 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 197 .draggable(draggable_options) 198 199 */ 200 201 }); 202 }); 203 204 205 $(document).ready(function() { 206 207 const win1 = new WinBox({ 208 id: "my-winbox1", 209 title: 'Winbox + Interact Example 1', 210 x: 200, 211 y: 200, 212 width: '400px', 213 height: '400px', 214 border: "0.3em", 215 background: "#29e", 216 html: "<p style=\"padding: 8px; color: #000;\">This window can be dragged around and resized</p>" 217 }); 218 219 let draggable_options = getCoreDraggableOptions(); 220 let resizable_options = getCoreResizableOptions(); 221 222 draggable_options.autoScroll = true; 223 224 interact('#my-winbox1') 225 .draggable(draggable_options) 226 .resizable(resizable_options); 227 228 229 230 const win2 = new WinBox({ 231 id: "my-winbox2", 232 title: 'Winbox + Interact Example 2', 233 x: 800, 234 y: 200, 235 width: '500px', 236 height: '300px', 237 border: "0.3em", 238 background: "#29e", 239 html: "<p class=\"scale-element\" style=\"padding: 8px; color: #000;\">This window can be dragged around, rotated and zoomed in and out</p>" 240 }); 241 242 /* 243 interact('#my-winbox2') 244 .draggable(draggable_options) 245 .resizable(resizable_options); 246 */ 247 248 let this_elem = document.getElementById('my-winbox2'); 249 250 let this_angle_scale = { 251 angle: 0, 252 scale: 1 253 } 254 255 256 let gdraggable_options = getCoreDraggableOptions(); 257 let gesturable_options = getCoreGesturableOptions(this_elem,this_angle_scale); 258 259 interact('#my-winbox2') 260 .gesturable(gesturable_options) 261 .draggable(gdraggable_options); 262 263 264 /* 265 interact('#my-winbox') 183 266 .draggable({ 184 267 // enable inertial throwing … … 209 292 } 210 293 } 211 })212 213 .resizable({214 // resize from all edges and corners215 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 style224 target.style.width = event.rect.width + 'px'225 target.style.height = event.rect.height + 'px'226 227 // translate when resizing from top or left edges228 x += event.deltaRect.left229 y += event.deltaRect.top230 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 parent240 interact.modifiers.restrictEdges({241 outer: 'parent'242 }),243 244 // minimum size245 interact.modifiers.restrictSize({246 min: { width: 100, height: 50 }247 })248 ],249 250 inertia: true251 294 }); 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 295 */ 296 268 297 }); -
gs3-extensions/tabletop-dl/trunk/tabletop.html
r37533 r37538 18 18 <script src="winbox-dist/js/winbox.min.js"></script> 19 19 --> 20 <link rel="stylesheet" href=" src/winbox-with-interactjs/dist/css/winbox.min.css">21 <script src=" src/winbox-with-interactjs/dist/js/winbox.min.js"></script>20 <link rel="stylesheet" href="winbox-with-interactjs-dist/css/winbox.min.css"> 21 <script src="winbox-with-interactjs-dist/js/winbox.min.js"></script> 22 22 23 23 <script src="interactjs-dist/interact.min.js"></script> … … 100 100 </body> 101 101 <script> 102 /* 103 function gsToggleHeader() 104 { 105 $('#gs-header').slideToggle(); 106 } 107 */ 102 108 103 $(document).ready(function() { 109 104 $("#gs-control-bar").width("100%").hide(); … … 115 110 }); 116 111 117 118 const win = new WinBox({119 id: "my-winbox",120 title: 'My Window2',121 width: '400px',122 height: '400px',123 });124 125 interact('#my-winbox')126 .draggable({127 // enable inertial throwing128 inertia: true,129 // keep the element within the area of it's parent130 modifiers: [131 interact.modifiers.restrictRect({132 restriction: 'parent',133 endOnly: true134 })135 ],136 // enable autoScroll137 autoScroll: true,138 139 listeners: {140 // call this function on every dragmove event141 move: dragMoveListener,142 143 // call this function on every dragend event144 end (event) {145 var textEl = event.target.querySelector('p')146 147 textEl && (textEl.textContent =148 'moved a distance of ' +149 (Math.sqrt(Math.pow(event.pageX - event.x0, 2) +150 Math.pow(event.pageY - event.y0, 2) | 0))151 .toFixed(2) + 'px')152 }153 }154 });155 156 112 }); 157 113 158 114 </script> 115 159 116 </html>
Note:
See TracChangeset
for help on using the changeset viewer.