製作一個可拖曳的列表(可分辨對錯)
成品:
成品功能:
- 所有表格中的人名可以拖曳
- 下方有個確認順序是否正確的按鈕
- 會顯示綠色以及紅色表示順序的對錯
- 拖曳途中經過的人名會顯示灰色代表將可以跟拖曳的人名做替換
HTML
html 程式碼:
1 |
|
CSS:
CSS 設置好的樣式
CSS 完整程式碼
1 | @import url('https://fonts.googleapis.com/css?family=Lato&display=swap'); |
小補充:
JS:
變數設置
draggable_list -整個 ul 的區域都是
check -按鈕的部分
richestPeople - 有錢人的順序
listItems - 空的陣列把創造好的 li 推進去
dragStartIndex -為了讓 dragStart 抓到 index 使用的
1 | const draggable_list=document.getElementById('draggable-list'); |
functions:
createList
- 使用[…]展開運算子才能把名字一條一條列出不然會直接印出一整個陣列
使用[…]展開運算子後才能這樣印出
a.sort 後面的 sort 部分是上面 object 的屬性不是方法要注意
這邊的事件監聽處理的內容都在這個創造的 li 上面所以使用 function 在這裏面直接呼叫
addEventListeners();
1 | function createList(){ |
事件監聽 function
- dragStart -
這個 func 的目的在於交換跟 drop 區域的內容dragStartIndex
這個變數設置在全域是因為整個轉換的過程會在 drop 那邊進行,這邊只是先抓取 index 而已 - dragEnter - 當拖曳的目標進入 li 時觸發 class=over 也就是變灰框框
- dragLeave -當拖曳的目標進入 li 時觸發 class=over 也就是變灰框框
- dragOver - 這邊做避免預設的狀況才有辦法使用 swapItems 這個函式不然會被一直提交
- dragDrop - 這邊的函式作用在於取的 start,end 的 index 並丟進去 swapItems 去作用
1 |
|
swapItems
運用剛剛取的的 start,end index 來尋找其中的 div 並且指派給變數 itemOne,itemTwo
並且做交換使用 appendChild 交換兩方的內容
1 | function swapItems(fromIndex, toIndex){ |
checkOrder
設立變數 personName 並且指派 draggable 的 innerText 然後跟 richestPeople 作對比
確認是否是正確的順序
對的話加上 class=”right”
錯的話加上 class=”wrong”
1 | //確認是否是正確的順序(跟richestPeople作對比) |
事件監聽
主要使用 drag&drop 系列的事件:
- dragstart - 點擊下去物件
- dragover -把拖曳的物件滑過其他物件時觸發
- drop -放下物件時觸發
- dragenter - 當拖曳物件進去其他物件時觸發
- dragleave- 當拖曳物件離開其他物件時觸發
確認順序的按鈕
- check -當按下按鈕會確認順序是否正確,正確顯示綠色錯誤顯示紅色
1 | function addEventListeners() { |
Higher Order Functions & Arrays 筆記
JS 完整程式碼:
1 | const draggable_list=document.getElementById('draggable-list'); |