@@ -37,7 +37,67 @@ function createList() {
37
37
listItems . push ( listItem ) ;
38
38
draggableList . appendChild ( listItem ) ;
39
39
} ) ;
40
+ addListeners ( ) ;
40
41
}
41
42
43
+ function dragStart ( ) {
44
+ dragStartIndex = + this . closest ( "li" ) . getAttribute ( "data-index" ) ;
45
+ }
46
+
47
+ function dragEnter ( ) {
48
+ this . classList . add ( "over" ) ;
49
+ }
50
+
51
+ function dragLeave ( ) {
52
+ this . classList . remove ( "over" ) ;
53
+ }
54
+
55
+ function dragOver ( e ) {
56
+ e . preventDefault ( ) ; // dragDrop is not executed otherwise
57
+ }
58
+
59
+ function dragDrop ( ) {
60
+ const dragEndIndex = + this . getAttribute ( "data-index" ) ;
61
+ swapItems ( dragStartIndex , dragEndIndex ) ;
62
+ this . classList . remove ( "over" ) ;
63
+ }
64
+
65
+ function swapItems ( fromIndex , toIndex ) {
66
+ // Get Items
67
+ const itemOne = listItems [ fromIndex ] . querySelector ( ".draggable" ) ;
68
+ const itemTwo = listItems [ toIndex ] . querySelector ( ".draggable" ) ;
69
+ // Swap Items
70
+ listItems [ fromIndex ] . appendChild ( itemTwo ) ;
71
+ listItems [ toIndex ] . appendChild ( itemOne ) ;
72
+ }
73
+
74
+ function checkOrder ( ) {
75
+ listItems . forEach ( ( listItem , index ) => {
76
+ const personName = listItem . querySelector ( ".draggable" ) . innerText . trim ( ) ;
77
+ if ( personName !== richestPeople [ index ] ) listItem . classList . add ( "wrong" ) ;
78
+ else {
79
+ listItem . classList . remove ( "wrong" ) ;
80
+ listItem . classList . add ( "right" ) ;
81
+ }
82
+ } ) ;
83
+ }
84
+
85
+ // Event Listeners
86
+ function addListeners ( ) {
87
+ const draggables = document . querySelectorAll ( ".draggable" ) ;
88
+ const dragListItems = document . querySelectorAll ( ".draggable-list li" ) ;
89
+ draggables . forEach ( ( draggable ) => {
90
+ draggable . addEventListener ( "dragstart" , dragStart ) ;
91
+ } ) ;
92
+ dragListItems . forEach ( ( item ) => {
93
+ item . addEventListener ( "dragover" , dragOver ) ;
94
+ item . addEventListener ( "drop" , dragDrop ) ;
95
+ item . addEventListener ( "dragenter" , dragEnter ) ;
96
+ item . addEventListener ( "dragleave" , dragLeave ) ;
97
+ } ) ;
98
+ }
99
+
100
+ check . addEventListener ( "click" , checkOrder ) ;
101
+
42
102
// Init
43
103
createList ( ) ;
0 commit comments