To-Do List Tutorial

1. Set Up the HTML Structure:
Below is the HTML structure for a basic to-do list:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do List</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<h1>To-Do List</h1>
<form id="task-form">
<input type="text" id="task-input" placeholder="Add New Task">
<button type="submit">Add</button>
</form>
<ul id="task-list">
<!-- Tasks will be dynamically added here -->
</ul>
</div>
<script src="script.js"></script>
</body>
</html>
2. Style the To-Do List (Optional):
You can style the to-do list using CSS. Below is a sample CSS file (styles.css) for basic styling:
/* styles.css */
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
}
.container {
max-width: 600px;
margin: 20px auto;
background-color: #fff;
padding: 20px;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
color: #333;
}
form {
margin-bottom: 20px;
display: flex;
}
#task-input {
flex: 1;
padding: 10px;
font-size: 16px;
border: 1px solid #ccc;
border-radius: 5px;
}
button {
padding: 10px 20px;
background-color: #333;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #555;
}
ul {
list-style: none;
padding: 0;
}
.task-item {
background-color: #f9f9f9;
padding: 10px;
margin-bottom: 5px;
border-radius: 5px;
}
.task-item.completed {
text-decoration: line-through;
opacity: 0.6;
}
3. Handle Task Addition:
Here's the JavaScript code (script.js) to handle task addition:
// script.js
const taskForm = document.getElementById('task-form');
const taskInput = document.getElementById('task-input');
const taskList = document.getElementById('task-list');
taskForm.addEventListener('submit', addTask);
function addTask(event) {
event.preventDefault();
const taskText = taskInput.value.trim();
if (taskText !== '') {
const taskItem = document.createElement('li');
taskItem.className = 'task-item';
taskItem.textContent = taskText;
taskList.appendChild(taskItem);
taskInput.value = '';
}
}
4. Display Tasks:
This step is already covered by the code in step 3.
5. Handle Task Completion:
Here's the JavaScript code to handle task completion:
// script.js (continued)
taskList.addEventListener('click', completeTask);
function completeTask(event) {
const taskItem = event.target;
if (taskItem.tagName === 'LI') {
taskItem.classList.toggle('completed');
}
}
6. Handle Task Deletion:
Here's the JavaScript code to handle task deletion:
// script.js (continued)
taskList.addEventListener('contextmenu', deleteTask);
function deleteTask(event) {
event.preventDefault();
const taskItem = event.target;
if (taskItem.tagName === 'LI') {
taskItem.remove();
}
}
7. Store Tasks in Local Storage (Optional):
You can use local storage to store tasks. Below is the JavaScript code to store and retrieve tasks from local storage:
// script.js (continued)
document.addEventListener('DOMContentLoaded', () => {
const tasks = JSON.parse(localStorage.getItem('tasks')) || [];
tasks.forEach(taskText => {
const taskItem = document.createElement('li');
taskItem.className = 'task-item';
taskItem.textContent = taskText;
taskList.appendChild(taskItem);
});
});
taskForm.addEventListener('submit', addTaskAndUpdateStorage);
function addTaskAndUpdateStorage(event) {
event.preventDefault();
const taskText = taskInput.value.trim();
if (taskText !== '') {
const taskItem = document.createElement('li');
taskItem.className = 'task-item';
taskItem.textContent = taskText;
taskList.appendChild(taskItem);
updateLocalStorage(taskText);
taskInput.value = '';
}
}
function updateLocalStorage(taskText) {
const tasks = JSON.parse(localStorage.getItem('tasks')) || [];
tasks.push(taskText);
localStorage.setItem('tasks', JSON.stringify(tasks));
}
Output:
To-Do List
