[JavaScript] localStorage를 활용한 todoList 만들기공부방2023. 1. 22. 21:05
Table of Contents
728x90
728x90
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>해야할이일</title>
</head>
<body>
<h1>todos</h1>
<form id="form">
<input type="text" class="input" id="input" placeholder="Enter your todo" autocomplete="off">
<ul class="todos" id="todos">
</ul>
</form>
<small>Left click to toggle completed. <br> Right click to delete todo</small>
<script src="script.js"></script>
</body>
</html>
input에서 입력된 값을 ul의 li에다가 담을 것이며, 스토리지를 이용해 새로고침해도 리스트가 남아있게 할 예정이다.
자바스크립트 공부를 위함이니 css는 맨 아래에다가 작성 해 두겠다.
JS
새로고침 이후에도 유지되기 위해 스토리지를 활용할 것이다.
localStorage에 데이터를 넘겨주기 위해 배열을 JSON.stringify() 메서드로 포맷팅한 뒤 넘겨주었다.
const form = document.querySelector('form');
const input = document.querySelector('input');
const ul = document.querySelector('ul');
const todos = "TODOS";
let arr = new Array();
// localStorage.clear();
//저장 시 obj -> string
function save(){
localStorage.setItem(todos, JSON.stringify(arr))
}
function put(text){
//필요한 li 생성작업
const li = document.createElement('li');
const liId = arr.length + 1;
li.textContent = text;
ul.appendChild(li);
li.id = liId;
//json형태로 정보저장
const Obj = {
id : liId,
text,
};
arr.push(Obj);
save();
}
function submit(e){
//form기능 중단
e.preventDefault();
const curVal = input.value;
put(curVal);
//form기능을 멈췄기때문에 put뒤에 반드시 벨류초기화
input.value='';
}
function load(){
const loading = localStorage.getItem(todos);
//스토리지에 값이 있나 확인하는 작업.
if(loading!==null){
const json = JSON.parse(loading); //stringify -> json(Obj)
//jsonobj중 text만 받아서 put(li에 추가)
json.forEach(function (j){
put(j.text);
})
}
}
//init에서 load를 불러오고, submit기능중단을 위한 form의 이벤트 추가
function init(){
load();
form.addEventListener('submit', submit);
}
init();
CSS
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;400&display=swap');
* {
box-sizing: border-box;
}
body {
background-color: #f5f5f5;
color: #444;
font-family: 'Poppins', sans-serif;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
margin: 0;
}
h1 {
color: rgb(179, 131, 226);
font-size: 10rem;
text-align: center;
opacity: 0.4;
}
form {
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
max-width: 100%;
width: 400px;
}
.input {
border: none;
color: #444;
font-size: 2rem;
padding: 1rem 2rem;
display: block;
width: 100%;
}
.input::placeholder {
color: #d5d5d5;
}
.input:focus {
outline-color: rgb(179, 131, 226);
}
.todos {
background-color: #fff;
padding: 0;
margin: 0;
list-style-type: none;
}
.todos li {
border-top: 1px solid #e5e5e5;
cursor: pointer;
font-size: 1.5rem;
padding: 1rem 2rem;
}
.todos li.completed {
color: #b6b6b6;
text-decoration: line-through;
}
small {
color: #b5b5b5;
margin-top: 3rem;
text-align: center;
}
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!