JSFiddle - React, Tailwind, and code Playground
by evon0306
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://kit.fontawesome.com/41e2a8dba7.js" crossorigin="anonymous"></script>
<title>ToDolist</title>
</head>
<body>
<div class="look">
<h1>ToDolist</h1>
<div class="formRange">
<!--功能表-->
<div class="functionBar">
<div id="add" title="新增" onclick="add()" ><i class="fa-solid fa-circle-plus"></i></div>
<div id="output" title="匯出" onclick="output()" ><i class="fa-solid fa-list"></i></div>
<div id="save" title="儲存" onclick="save()" ><i class="fa-solid fa-floppy-disk"></i></div>
</div>
<!--清單-->
<div class="todo-container">
<div class="todo">
<!--空白-->
<div class="top"></div>
<!--輸入-->
<div>
<div class="inner">
<div><i class="fa-regular fa-square-full" onclick="finished()"></i></div>
<input type="text">
<select class="level" >
<option value="normal">一般</option>
<option value="important">重要</option>
<option value="urgent">警急</option>
</select>
</div>
<center><i title="刪除" onclick="deleteli()" class="fa-solid fa-trash"></i></center>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
SCSS
$themeColor:#39CCCC;
*{
margin: 0;
padding: 0;
box-sizing: border-box;
border: none;
}
html{
width: 100%;
height: 100%;
body{
width: 100%;
height: 100%;
background-color: #39CCCC;
.look{
width: 90%;
max-width: 580px;
margin: 3rem auto;
padding: 20px;
border-radius: 3px;
background-color: white;
h1{
text-align: center;
color: #248484;
}
.formRange{
display: flex;
flex-direction:row-reverse;
justify-content: center;
align-items: flex-start;
.functionBar{
padding: 0.3rem;
margin: 0.2rem;
border: #39CCCC 1px solid;
border-radius: 3px;
transition: all 0.3s ease;
i{
scale: 1.3;
margin: 0.4rem;
color:#248484;
cursor: pointer;
&:hover{
color:#405252;
}
}
}
.todo-container {
display: flex;
flex-direction:column;
justify-content: center;
width: 90%;
.todo{
padding: 0.5rem;
margin: 0.2rem;
// border: #39CCCC 1px solid;
background-color: rgb(228, 252, 251);
border-radius: 3px;
width: 98%;
i{
scale: 1.3;
margin: 0.4rem;
color:#248484;
cursor: pointer;
&:hover{
color:#405252;
}
}
.inner{
margin: 0.3rem 0.5rem;
display:flex;
align-items: center;
...
JavaScript
//localStorage setList()
//updateWishList()
//setList()
//add()
//change()
//output()
//deleteli()
//finished()
//save()
// 儲存的變數,在第一次提取會取不到資料(null),因此如果無資料就建立空陣列
let List = JSON.parse(localStorage.getItem('saveList')) || [];
let color = JSON.parse(localStorage.getItem('savecolor')) || [];
let Finish = JSON.parse(localStorage.getItem('saveFinish')) || [];
function setList() {
if(List.length > 0){ // 检查List数组是否为空
for (let i = 1; i < List.length; i++) {
add();
}
let input = document.querySelectorAll('input');
let select = document.querySelectorAll('select');
let check = document.querySelectorAll('.inner');
for(let i = 0; i < input.length; i++){
input[i].value = List[i];//還原input的內容
select[i].value = color[i];//還原select的內容
check[i].children[0].children[0].className = Finish[i];//還原勾勾
if(color[i] == "normal"){//還原input的顏色
input[i].className = "normalText"
}else if(color[i] == "important"){
input[i].className = "importantText"
}else{
input[i].className = "urgentText";
}
}
}
}
setList();
function save(){
/*
| 宣告變數,綁定輸入欄,
| 得到 input 和 select 內容,push 到陣列
| 執行 localStroage
*/
List = [];
color = [];
Finish = [];
let input = document.querySelectorAll('input');
let select =document.querySelectorAll('select');
let check = document.querySelectorAll('.inner');
for(let x of input){
List.push(x.value);
}
for(let y of select){
color.push(y.value);
}
for(let z of check){
Finish.push(z.children[0].children[0].className);
}
updateWishList();
alert("儲存成功!");
}
function updateWishList() {
//將陣列轉成字串,存入 localstorage
localStorage.setItem('saveList', JSON.stringify(List));
localStorage.setItem('savecolor', JSON.stringify(color));
localStorage.setItem('saveFinish', JSON.stringify(Finish));
}
function add() {
// 取得 formRange 區塊
...