[Vanilla JS] TODOLIST (1)
29651 ワード
反応するといきなりヴァニラJSTODOLISTに…?
理由は...
休みの最後の8月に、私は本当に勉強する考えがありました.だから私は何か足りないところがあると思いました.
私はずっと反応をしていましたが、やるときはいつも「基礎が大切だ」と感じていました.はい.
なぜなら、私は反応器を使ってプロジェクトを行うことに慣れているが、基本的なJSの使用能力が低下しているため、純粋なJSだけを使ってプロジェクトを行う実力がまだ足りないからだ.
また、最近オランウテックの開発が一時阻まれています...ㅠㅠは何もすることがなくて、賢太は一日に50回来ました.
だからね。
バックエンドがCRUDベースの場合、フロントエンドはTODOLISTベースとなります.
TODOLISTの作成を決定しました。
いきなり始まったTodoList制作…
手軽にUIから考える.
PigmaでUIを作ろうと思っていたのですが、どうせ自分で作ったものなので、頭の中では多分UIを編んで開発を始めました.
そして想像通りにだいたいPublishingができました!
inputイベントコード
<input id="input-box" onkeyup=enter()
type="text" placeholder="오늘 할 일을 적어보세요.">
< index.html >onkeyup
イベントが発生します.// input 가져오기
const inputValue = document.querySelector('#input-box');
// 엔터 이벤트가 일어날 때 함수
const enter = () => {
if (window.event.keyCode == 13 && (inputValue.value)) {
toDo();
}
}
< index.js >Enterキーを押すと、inputに値がある場合、todo()が実行されます(inputに内容がない場合、enterが押されてもtodo関数は実行されません).
これによりinput値をjsにインポートしEnterキーを押し、inputに値がある場合はtoDo関数を実行する部分が完了します.
ToDo()関数コード
<main>
<input id="input-box" onkeyup=enter() type="text"
placeholder="당신의 오늘 할 일을 적어보세요.">
<div id="main-div">
</div>
</main>
< index.html >// toDo 리스트를 추가하는 함수
const toDo = () => {
// input 에 들어온 text 설정
let text = inputValue.value;
// 새로운 tododiv 만들기
const newTodo = document.createElement("div");
const newTodoText1 = document.createElement("p");
const newTodoText2 = document.createElement("p");
// div 안에 자식 추가
newTodo.appendChild(newTodoText1);
newTodo.appendChild(newTodoText2);
// p 안의 text 설정
newTodoText1.innerHTML = `${text}`
// p 안의 del 설정
newTodoText2.innerHTML = 'X'
// class 추가
newTodo.setAttribute("class","todo-box");
newTodoText2.setAttribute("onclick","del()")
// mainDiv 안에 넣기
mainDiv.appendChild(newTodo);
// input 값 초기화
inputValue.value = '';
}
< index.js >まず、
input
に格納されるtext
また、todoを1つ追加するごとに
html
に新しいtododiv
が生成されるので、tododiv
が作成される.tododiv
は、divのサブ要素として1つのdivおよび2つのpタグを含むので、以下に示す. const newTodo = document.createElement("div");
const newTodoText1 = document.createElement("p");
const newTodoText2 = document.createElement("p");
<div>
<p></p>
<p></p>
</div>
appendChild
をdivのサブアイテムとして2つのpタグを追加します.// div 안에 자식 추가
newTodo.appendChild(newTodoText1);
newTodo.appendChild(newTodoText2);
InnerHTMLを使用して、タグに入れるフォントを決定します.
setAttribute
を使用して、タグにクラスとイベントを設定します.最後に、
html
で作成したdivをサブエレメントとしてmainDivコンテナに入れ、入力値を初期化します. // p 안의 text 설정
newTodoText1.innerHTML = `${text}`
// p 안의 del 설정
newTodoText2.innerHTML = 'X'
// class 추가
newTodo.setAttribute("class","todo-box");
newTodoText2.setAttribute("onclick","del()")
// mainDiv 안에 넣기
mainDiv.appendChild(newTodo);
// input 값 초기화
inputValue.value = '';
Del()関数コード
const del = () => {
// todo 의 부모를 찾아서 todo 를 삭제
mainDiv.removeChild(event.target.parentNode);
// 요게 todo 하나
console.log(event.target.parentNode);
}
< index.js >event.target
は、イベントが発生した要素を返します.したがって、event.target
は、Xフォントのpタグを返す.私たちがしたいのはX字で対応するtododivブロックを削除するので、X字の両親を見つけることができます.
tododiv
を含むmainDiv
を選択した後、mainDiv
の子供(tododivら)の中でdel
イベントを検索して削除する.+ CSS
/* --- 글씨체 import --- */
/* font-family: 'Montserrat', sans-serif; */
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600&display=swap');
/* --- 기본 글씨체 설정 --- */
html {
font-family: 'Montserrat', sans-serif;
font-weight: 300;
font-size: 15px;
overflow: hidden;
}
/* --- body height 설정 ---
body {
} */
#header-div {
top:0;
font-weight: 300;
font-size: 4rem;
height: 10vh;
text-align: center;
padding: 3% 0;
}
#main-div {
display: flex;
flex-direction: column;
overflow-y: scroll;
height: 60vh;
width: 720px;
margin: 0 auto;
}
#main-div::-webkit-scrollbar{
width: 5px;
}
#main-div::-webkit-scrollbar-thumb{
height: 5%;
background-color: rgba(104, 207, 211, 0);
border-radius: 10px;
}
#main-div::-webkit-scrollbar-track{
background-color: rgba(206, 206, 206, 0);
}
#footer-div {
/* background-color: rgb(214, 214, 214); */
width: 100%;
position: absolute;
bottom: 0;
}
#input-box {
font-size: 1.8rem;
font-weight: 100;
display: block;
margin: 0 auto;
width: 680px;
height: 50px;
border: none;
padding: 10px;
border-bottom: 1px solid rgba(104, 207, 211, 0.8);
margin-bottom: 30px;
}
#input-box:focus {
/* transition: .3s; */
/* height: 50px; */
outline: none;
}
.todo-box {
transition: .3s;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 1.5rem;
font-weight: 100;
min-height: 80px;
/* height: 80px; */
margin: 5px 0;
padding: 5px 30px;
border-radius: 10px;
border: 1px solid rgba(206, 206, 206, 0.3);
background-color: rgba(228, 228, 228, 0.2);
}
.todo-box p:nth-child(2) {
font-size: 2rem;
font-weight: 500;
color: rgba(206, 206, 206, 0.3);
}
.todo-box p:nth-child(2):hover {
color: rgb(248, 114, 114);
transition: .3s;
cursor: pointer;
}
.todo-text{
padding-right: 10px;
}
<詳細コードはGITHUBで…>✔GITHUB
だから。
これで終わりです.
Inputにやるべきことを書き、enterを打つと下に追加され、各ボックスのxキーを押すと対応するボックスが削除されます.
また、todoの生成時間も表示されます.このセクションでは、リフレッシュ時にtodolistが失われないように、次のリリースでtodolistをlocalStorageに保存します.
に感銘を与える
本当に久しぶりにヴァニラJSで何をしていたのか、最初はあまり気分が悪くて、これなのかあれなのか、自信がありませんでした.でもやってるうちにだんだん面白くなってきました..^^がんばって完成させよう
Reference
この問題について([Vanilla JS] TODOLIST (1)), 我々は、より多くの情報をここで見つけました https://velog.io/@qhahd78/Vanilla-JS-TODOLIST-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol