annotate src/alternatives/draggabilly.html @ 24:f8c97193c772 default tip

indexOf
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 20 Jan 2026 18:48:04 -0700
parents df0f6d0d55e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 <!doctype html>
21
df0f6d0d55e8 add lang
Franklin Schmidt <fschmidt@gmail.com>
parents: 9
diff changeset
2 <html lang="en">
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 <head>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 <meta name="viewport" content="width=device-width, initial-scale=1">
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 <style>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 @import "/site.css";
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 div[drag] {
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 border: 1px solid;
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 margin: 8px;
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 padding: 8px;
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 background-color: LightGreen;
2
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
13 cursor: move;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
14 }
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
15 div[drag].is-dragging {
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
16 z-index: 1;
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 }
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 </style>
2
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
19 <script src="https://unpkg.com/draggabilly@3.0.0/dist/draggabilly.pkgd.js"></script>
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 <script>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 'use strict';
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22
2
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
23 let dragEntered;
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
2
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
25 function onDragStart( event, pointer ) {
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
26 dragEntered = null;
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 }
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28
2
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
29 function onDragEnter(dragging,entered) {
24
f8c97193c772 indexOf
Franklin Schmidt <fschmidt@gmail.com>
parents: 21
diff changeset
30 let divs = Array.from(document.querySelectorAll('div[drag]'));
f8c97193c772 indexOf
Franklin Schmidt <fschmidt@gmail.com>
parents: 21
diff changeset
31 let iEntered = divs.indexOf(entered);
f8c97193c772 indexOf
Franklin Schmidt <fschmidt@gmail.com>
parents: 21
diff changeset
32 let iDragging = divs.indexOf(dragging);
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 console.log(iDragging+' '+iEntered);
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 let parent = entered.parentNode;
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 if( iDragging < iEntered ) {
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 let next = divs[iEntered+1];
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 if( next ) {
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 parent.insertBefore( dragging, next );
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 } else {
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 parent.appendChild( dragging );
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 }
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 } else {
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 parent.insertBefore( dragging, entered );
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 }
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 }
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46
2
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
47 function onDragMove( event, pointer, moveVector ) {
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
48 let target = pointer.target;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
49 let x = pointer.clientX;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
50 let y = pointer.clientY;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
51 let divs = document.querySelectorAll('div[drag]');
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
52 for( let i=0; i<divs.length; i++ ) {
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
53 let div = divs[i];
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
54 if( div === target )
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
55 continue;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
56 let rect = div.getBoundingClientRect();
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
57 if( rect.x <= x && x <= rect.x+rect.width && rect.y <= y && y <= rect.y+rect.height ) {
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
58 if( div !== dragEntered ) {
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
59 dragEntered = div;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
60 onDragEnter(target,div);
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
61 }
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
62 break;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
63 }
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
64 }
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
65 }
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
66
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
67 function onDragEnd( event, pointer ) {
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
68 //console.log('onDragEnd');
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
69 //console.log(event);
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
70 //console.log(pointer);
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
71 let target = pointer.target;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
72 //target.style.left = null;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
73 //target.style.top = null;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
74 target.draggie.setPosition(0,0);
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
75 //console.log(target.draggie.position);
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
76 }
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
77
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
78 function init() {
2
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
79 let divs = document.querySelectorAll('div[drag]');
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
80 for( let i=0; i<divs.length; i++ ) {
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
81 let div = divs[i];
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
82 let draggie = new Draggabilly(div,{});
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
83 draggie.on( 'dragStart', onDragStart );
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
84 draggie.on( 'dragMove', onDragMove );
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
85 draggie.on( 'dragEnd', onDragEnd );
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
86 div.draggie = draggie;
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
87 }
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
88 }
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
89 </script>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
90 </head>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
91 <body>
2
264646feb67b add draggabilly
Franklin Schmidt <fschmidt@gmail.com>
parents: 1
diff changeset
92 <h1><a href="https://draggabilly.desandro.com/">Draggabilly</a></h1>
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
93
9
eee8862be4c7 update text
Franklin Schmidt <fschmidt@gmail.com>
parents: 2
diff changeset
94 <p>This supports drag but not drop. When I try to implement drop in a list, it gets confused when the DOM changes. The library is in <a href="https://unpkg.com/draggabilly@3.0.0/dist/draggabilly.pkgd.js">draggabilly.pkgd.js</a>.</p>
1
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
95
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
96 <div>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
97 <script>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
98 for( let i=1; i<=10; i++ ) {
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
99 document.write(`
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
100 <div drag id="${i}">${i} - drag me</div>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
101 ` );
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
102 }
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
103 </script>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
104 </div>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
105 </body>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
106 <script> init(); </script>
9c372fce698a start alternatives
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
107 </html>