자바스크립트랑 더 친해지기 위해 바닐라 자바스크립트로 프로젝트를 진행해보기로 하였다
localStorage에 값이 없다면 이름의 입력란에 hidden:none 테그를 지워 입력란이 출력된다.
이름을 입력하면 입력란은 다시 hidden:none이 추가되어 보이지 않게 되고
사용자의 이름과 투두리스트의 입력이 보여진다.
투두리스트의 전체적인 흐름을 먼저 잡아보자면,
- 사용자가 입력란에 오늘 할 일 입력
- 입력한 순간 입력된 text가 빈 배열에 추가, html테그가 추가되어 화면에 그려짐, 로컬스토리지에 text로 저장한다.
- 리스트를 입력하면 아래로 나열된다.
function saveTodo() {
localStorage.setItem("todo", JSON.stringify(toDos));
}
function handleClick(event) {
const a = event.target.parentElement;
console.log(a.parentElement);
a.remove();
console.log(a.parentElement);
toDos = toDos.filter((item) => item.id !== parseInt(a.id));
saveTodo();
}
function paintTodo(todo) {
const list = document.createElement("li");
list.id = todo.id;
const span = document.createElement("span");
span.className = "addList";
span.innerText = todo.text;
const btn = document.createElement("button");
btn.innerText = "Delete";
btn.addEventListener("click", handleClick);
list.appendChild(span);
list.appendChild(btn);
todoList.appendChild(list);
}
function handleSubmit(e) {
e.preventDefault();
const newTodo = todoInput.value;
todoInput.value = "";
const newObj = {
text: newTodo,
id: Date.now(),
};
toDos.push(newObj);
paintTodo(newObj);
saveTodo(newTodo);
}
todoForm.addEventListener("submit", handleSubmit);
const saved = localStorage.getItem("todo");
if (saved !== null) {
const parseTodo = JSON.parse(saved);
toDos = parseTodo;
parseTodo.forEach(paintTodo);
}
-로컬스토리지에 저장되어 있는 객체
img파일에 배경화면으로 설정할 이미지들을 추가한다.
그리고 그 이미지들을 배열형태로 이미지파일 이름을 넣어준 후 images변수에 저장한다.
images를 랜덤으로 출력하는데 images[Math.floor(Math.random() * images.length)] 이 메서드를 사용한다.
먼저 0부터 1구간에서 랜덤으로 수를 생성하는 난수생성 함수를 사용하는데 이것을 images의 길이만큼 생성한다.
그리고 소수단위로 나오는 것을 정수로 바꾸기 위해 Math.floor() 메서드를 사용한다.
이 메서드는 작은 정수를 반환한다.
그리고 바뀌는 images의 값을 changeImg에 담아 템플릿 리터럴로 img테그형태에 넣어준다!
<img src = "img/2.jpg" class="bg">
형태로 출력이 된다.
const images = ["1.jpg", "2.jpg", "3.jpg"];
const changeImg = images[Math.floor(Math.random() * images.length)];
// const bgImage = document.createElement("img");
//위 코드를 아래처럼 new Image()를 사용하여 테그를 추가할 수 있다!
const bgImage = new Image();
bgImage.src = `img/${changeImg}`;
bgImage.className = "bg";
document.body.appendChild(bgImage);
이 이미지들 이름을 전부 배열에 넣어줄 수가 없다. 그래서 for문을 사용해 보기로 했다.
const images = [];
for (let i = 1; i < 4; i++) {
images.push(i + ".jpg");
console.log(images);
}
const changeImg = images[Math.floor(Math.random() * images.length)];
// const bgImage = document.createElement("img");
const bgImage = new Image();
bgImage.src = `img/${changeImg}`;
console.log(bgImage.src, "gd");
bgImage.className = "bg";
document.body.appendChild(bgImage);
빈 배열을 images 변수에 넣어준다.
그리고 for문 초기문으로 1부터 images의 파일 수 만큼 반복을 돌린다고 작성해 주고 실행문에 빈 배열에 반복되는 조건마다 +jpg를 더해주었다.
그리고 위와 같이 랜덤으로 실행하는 메서드를 사용해준다.
그럼 똑같이 실행이 된다!