iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
自我挑戰組

學習JavaScript的基礎概念系列 第 29

Day29 來製作ToDoList吧 - 2

  • 分享至 

  • xImage
  •  

製作ToDoList流程-2

  • 建立「勾選」按鈕的偵聽事件
  • 讓點擊按鈕時不會點到圖示
  • 按下勾選完成按鈕出現刪除線,再按一次刪除線消失
  • 建立「清除」按鈕的偵聽事件
  • 按下清除按鈕出現後todo消失
  • 讓輸入完畢按下送出按鈕後,表單內容清空
  • 加入防呆機制,判斷使用者是否輸入為空白

在表單按鈕事件內新增,觀察按下勾選按鈕時的動作:

//按下勾選按鈕時的動作     
completeButton.addEventListener("click", (e)=>{ 
    console.log(e.target); 
})

有時候會點到按鈕,有時候會點到圖示
https://ithelp.ithome.com.tw/upload/images/20221013/201520707VglxSGLlI.png

仔細比對會看到圖示和按鈕是不同位置
https://ithelp.ithome.com.tw/upload/images/20221013/20152070pyjAM5rMUQ.pnghttps://ithelp.ithome.com.tw/upload/images/20221013/20152070mjKh6e5hJx.png

因此要在CSS加入這段, 讓滑鼠不會點到圖示 :

i {
   pointer-events: none;
}

https://ithelp.ithome.com.tw/upload/images/20221013/20152070oH39yKoTlz.png
https://ithelp.ithome.com.tw/upload/images/20221013/20152070NmKYqNXHBf.png

勾選完成按鈕出現的刪除線:

    //按下勾勾按鈕時的動作    
    completeButton.addEventListener("click", (e)=>{
        // 查看目前物件
        console.log(e.target);
        //找父元素
        console.log(e.target.parentElement);

        //按下時新增完成時可切換class
        let todoItem = e.target.parentElement;
        todoItem.classList.toggle("done");
    })

https://ithelp.ithome.com.tw/upload/images/20221013/20152070UQyLre6Uoh.png

在CSS加入樣示:

.done {
   opacity: 0.4;
   text-decoration: line-through;
   /* 刪除線粗度 */
   text-decoration-thickness: 0.2rem;
}

按下「完成」按鈕出現刪除線,再按一次刪除線消失
https://ithelp.ithome.com.tw/upload/images/20221013/20152070O1vc39y3Z9.png

建立「清除」按的偵聽事件

Element: animationend event
當CSS 動畫完成animationend時觸發該事件。如果動畫在完成之前中止,例如從 DOM 中刪除元素或從元素中刪除動畫,則不會觸發事件。
語法:

addEventListener('animationend', (event) => {});

在表單按鈕事件內新增,觀察按下清除按鈕時的動作:

    trashButton.addEventListener("click", (e)=>{
        // 查看目前物件
        console.log(e.target);
        //找父元素
        console.log(e.target.parentElement);
        let todoItem = e.target.parentElement;

        //清除目前的父元件 
        todoItem.remove();
    })

https://ithelp.ithome.com.tw/upload/images/20221013/20152070D1IMJ4Sa95.png

按下清除按鈕後(從左圖變成右圖):
https://ithelp.ithome.com.tw/upload/images/20221013/2015207030DRDUB8DS.pnghttps://ithelp.ithome.com.tw/upload/images/20221013/20152070JODMZyd1Sa.png

把輸入內容都放到todo時,清空表單裡的文字:
這段程式碼可放在按下Add into List按鈕事件裡的最下方

//在最後東西都放到todo裡面時,清空input裡的文字
    form.children[0].value = "";

防呆機制,判斷使用者是否輸入為空白:
這段程式碼位置要放在建立todo前

    //防呆機制,判斷使用者是否輸入為空白
    if (todoText === "") {
        alert("請輸入文字")
        //這裡的return是直接結束callback function,不回傳任何東西
        return;
    }

參考資料:

Element: animationend event - Web APIs | MDN

animation-fill-mode - CSS: Cascading Style Sheets | MDN

pointer-events - CSS: Cascading Style Sheets | MDN

text-decoration - CSS: Cascading Style Sheets | MDN


上一篇
Day28 來製作ToDoList吧 - 1(附上Font Awesome使用教學)
下一篇
Day30 ToDoList - 3 & 自我挑戰感想
系列文
學習JavaScript的基礎概念30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言