JS30 Day 10 筆記


Posted by GL on 2023-05-23

功能

使用 Shift + 滑鼠左鍵點擊後,可以連續選取,

Demo

step 1 : 選取到所有的 HTML checkbox

// 選取到所有的 checkbox
const checkboxes = document.querySelectorAll("input[type='checkbox']")

step 2 :將每個 checkbox 加上 click 監聽事件

// 監聽每個 checkbox 
checkboxes.forEach( checkbox =>{
  checkbox.addEventListener('click', handleClick)
})

step 3 : 建立函式 handleClick

// 建立變數 lastCheck,待會接收上一個點擊的 checkbox
let lastCheck 

function handleClick(e){
  // 當按著 shift 不放,而且勾選了 checkbox 時
  if(e.shiftKey && this.checked){

    // 建立一個 isBetween 的 switch 標記
    let isBetween = false

    // 遍歷每一個 checkbox
    checkboxes.forEach(checkbox=>{

      // 將兩次點擊的 checkbox 之間的 checkbox 們設定 isBetween 的標記
      if(checkbox === this || checkbox === lastCheck){

        // 如果在兩個點選的 checkbox 之內就標記,否則關閉標記
        isBetween = !isBetween
      }

      // 標記的區間 checkbox,將其 checked 設為 true
      if(isBetween){
        checkbox.checked = true
      }
    })
  }
  // 如果沒有按著 shift 不放,且同時勾選了 checkbox,記下這次的 checkbox
  lastCheck = this
}

參考資料:


#JS 30







Related Posts

React 基礎:以 state 為中心去思考

React 基礎:以 state 為中心去思考

淺談產品開發與工作流程

淺談產品開發與工作流程

D22_第三週解題

D22_第三週解題


Comments