Hey friends, today in this blog you’ll learn how to create Todo List App using HTML CSS & JavaScript. In the previous blog, I’ve also shared How to Build A Dictionary App.
So today I came with another blog where I create Todo App and the lists or tasks that you add won’t be removed when you refresh the page and in this todo app there are also features of pending tasks number and you can also delete all tasks that you have added on single click.
As you may know, A to-do list is a list of tasks you need to complete or things you want to do and in our design [Todo List App], there is a content box that holds only the input field with some buttons and text. When you entered some characters and click on the plus (+) button, the list will be added to your tasks list and the number of the pending tasks also be updated.
You can also delete each list by clicking on the trash icon, and remember this trash icon only appear on hover on the particular list and delete all tasks with a single click.
You Might This Blog:
- Login Signup Page Using Advanced CSS And HTML.
- How to create an HTML CSS animated sidebar navigation menu.
- C LANGUAGE CHEATSHEET FOR CLASS 12.
Todo List App in JavaScript
To create this program [Todo List App]. First, you need to create three files, HTML File, CSS File, and JavaScript File. After creating these files just paste the following codes into your files. You can also download the source code files of the to-do list app from the given download button.
First, create an HTML file with the name of index.html and paste the given codes in your HTML file. Remember, you’ve to create a file with .html extension.
<!DOCTYPE html> <!-- Created By CodeWithNepal - www.codewithnepal.com --> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Todo App JavaScript | CodeWithNepal</title> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"/> </head> <body> <div class="wrapper"> <header>Todo App</header> <footer>codewithnepal</footer> <div class="inputField"> <input type="text" placeholder="Add your new todo"> <button><i class="fas fa-plus"></i></button> </div> <ul class="todoList"> <!-- data are comes from local storage --> </ul> <div class="footer"> <span>You have <span class="pendingTasks"></span> pending tasks</span> <button>Clear All</button> </div> </div> <script src="script.js"></script> </body> </html>
Second, create a CSS file with the name of style.css and paste the given codes in your CSS file. Remember, you’ve to create a file with .css extension.
@import url('https://fonts.googleapis.com/css2?family=Poppins:[email protected];300;400;500;600;700&display=swap'); *{ margin: 0; padding: 0; box-sizing: border-box; font-family: 'Poppins', sans-serif; } ::selection{ color: #ffff; background: rgb(91, 4, 204); } body{ width: 100%; height: 100vh; /* overflow: hidden; */ padding: 10px; background: linear-gradient(to bottom, #68EACC 0%, #1b3263 100%); } .wrapper{ background: #fff; max-width: 400px; width: 100%; margin: 120px auto; padding: 25px; border-radius: 5px; box-shadow: 0px 10px 15px rgba(0,0,0,0.1); } .wrapper header{ font-size: 30px; font-weight: 600; } .wrapper .inputField{ margin: 20px 0; width: 100%; display: flex; height: 45px; } .inputField input{ width: 85%; height: 100%; outline: none; border-radius: 3px; border: 1px solid #ccc; font-size: 17px; padding-left: 15px; transition: all 0.3s ease; } .inputField input:focus{ border-color: #6600eb; } .inputField button{ width: 50px; height: 100%; border: none; color: #fff; margin-left: 5px; font-size: 21px; outline: none; background: #6600eb; cursor: pointer; border-radius: 3px; opacity: 0.6; pointer-events: none; transition: all 0.3s ease; } .inputField button:hover, .footer button:hover{ background: #6600eb; } .inputField button.active{ opacity: 1; pointer-events: auto; } .wrapper .todoList{ max-height: 250px; overflow-y: auto; } .todoList li{ position: relative; list-style: none; margin-bottom: 8px; background: #f2f2f2; border-radius: 3px; padding: 10px 15px; cursor: default; overflow: hidden; word-wrap: break-word; } .todoList li .icon{ position: absolute; right: -45px; top: 50%; transform: translateY(-50%); background: #e74c3c; width: 45px; text-align: center; color: #fff; padding: 10px 15px; border-radius: 0 3px 3px 0; cursor: pointer; transition: all 0.2s ease; } .todoList li:hover .icon{ right: 0px; } .wrapper .footer{ display: flex; width: 100%; margin-top: 20px; align-items: center; justify-content: space-between; } .footer button{ padding: 6px 10px; border-radius: 3px; border: none; outline: none; color: #fff; font-weight: 400; font-size: 16px; margin-left: 5px; background: #6600eb; cursor: pointer; user-select: none; opacity: 0.6; pointer-events: none; transition: all 0.3s ease; } .footer button.active{ opacity: 1; pointer-events: auto; }
Last, create a JavaScript file with the name of script.js and paste the given codes in your JavaScript file. Remember, you’ve to create a file with .js extension.
// getting all required elements const inputBox = document.querySelector(".inputField input"); const addBtn = document.querySelector(".inputField button"); const todoList = document.querySelector(".todoList"); const deleteAllBtn = document.querySelector(".footer button"); // onkeyup event inputBox.onkeyup = ()=>{ let userEnteredValue = inputBox.value; //getting user entered value if(userEnteredValue.trim() != 0){ //if the user value isn't only spaces addBtn.classList.add("active"); //active the add button }else{ addBtn.classList.remove("active"); //unactive the add button } } showTasks(); //calling showTask function addBtn.onclick = ()=>{ //when user click on plus icon button let userEnteredValue = inputBox.value; //getting input field value let getLocalStorageData = localStorage.getItem("New Todo"); //getting localstorage if(getLocalStorageData == null){ //if localstorage has no data listArray = []; //create a blank array }else{ listArray = JSON.parse(getLocalStorageData); //transforming json string into a js object } listArray.push(userEnteredValue); //pushing or adding new value in array localStorage.setItem("New Todo", JSON.stringify(listArray)); //transforming js object into a json string showTasks(); //calling showTask function addBtn.classList.remove("active"); //unactive the add button once the task added } function showTasks(){ let getLocalStorageData = localStorage.getItem("New Todo"); if(getLocalStorageData == null){ listArray = []; }else{ listArray = JSON.parse(getLocalStorageData); } const pendingTasksNumb = document.querySelector(".pendingTasks"); pendingTasksNumb.textContent = listArray.length; //passing the array length in pendingtask if(listArray.length > 0){ //if array length is greater than 0 deleteAllBtn.classList.add("active"); //active the delete button }else{ deleteAllBtn.classList.remove("active"); //unactive the delete button } let newLiTag = ""; listArray.forEach((element, index) => { newLiTag += `<li>${element}<span class="icon" onclick="deleteTask(${index})"><i class="fas fa-trash"></i></span></li>`; }); todoList.innerHTML = newLiTag; //adding new li tag inside ul tag inputBox.value = ""; //once task added leave the input field blank } // delete task function function deleteTask(index){ let getLocalStorageData = localStorage.getItem("New Todo"); listArray = JSON.parse(getLocalStorageData); listArray.splice(index, 1); //delete or remove the li localStorage.setItem("New Todo", JSON.stringify(listArray)); showTasks(); //call the showTasks function } // delete all tasks function deleteAllBtn.onclick = ()=>{ listArray = []; //empty the array localStorage.setItem("New Todo", JSON.stringify(listArray)); //set the item in localstorage showTasks(); //call the showTasks function }