Esta lista de tareas te permite añadir, modificar, eliminar y marcar como completada una tarea.
index.html
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lista de Tareas</title>
<link rel="stylesheet" href="estilos.css">
<script src="script.js"></script>
</head>
<body>
<header>
<h1>Bienvenido a tu Lista de Tareas I.E.S. Al- Ándalus</h1>
</header>
<main>
<input type="text" id="tareaEntrada" placeholder="Añadir nueva tarea">
<button id="agregarBtn">Agregar Tarea</button>
<ul id="listaTareas"></ul>
</main>
<footer>
<h6>Francisco Miguel Casas Méndez - DAW 24/25</h6>
</footer>
</body>
</html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lista de Tareas</title>
<link rel="stylesheet" href="estilos.css">
<script src="script.js"></script>
</head>
<body>
<header>
<h1>Bienvenido a tu Lista de Tareas I.E.S. Al- Ándalus</h1>
</header>
<main>
<input type="text" id="tareaEntrada" placeholder="Añadir nueva tarea">
<button id="agregarBtn">Agregar Tarea</button>
<ul id="listaTareas"></ul>
</main>
<footer>
<h6>Francisco Miguel Casas Méndez - DAW 24/25</h6>
</footer>
</body>
</html>
script.js
// script.js
window.onload = function() {
const nombre = prompt("¿Cuál es tu nombre?");
alert(`¡Bienvenido, ${nombre}!`);
const agregarBtn = document.getElementById('agregarBtn');
const tareaEntrada = document.getElementById('tareaEntrada');
const listaTareas = document.getElementById('listaTareas');
// Cargar tareas desde localStorage
cargarTareas();
agregarBtn.addEventListener('click', function() {
const tareaTexto = tareaEntrada.value.trim(); // Eliminar espacios en blanco
if (tareaTexto) {
const li = crearTarea(tareaTexto);
listaTareas.appendChild(li); // Añadir el li a la lista de tareas
tareaEntrada.value = ''; // Limpiar el campo de entrada
guardarTareas(); // Guardar tareas en localStorage
} else {
alert("Por favor, escribe una tarea."); // Mensaje si el campo está vacío
}
});
function crearTarea(tareaTexto) {
const li = document.createElement('li');
// Contenedor para el texto de la tarea
const textoTarea = document.createElement('span');
textoTarea.className = 'texto-tarea';
textoTarea.textContent = tareaTexto;
// Botón de editar
const editarBtn = document.createElement('button');
editarBtn.textContent = 'Editar';
editarBtn.className = 'editar';
editarBtn.addEventListener('click', function(event) {
event.stopPropagation(); // Evitar que el clic en el botón active el evento de la tarea
const nuevoTexto = prompt("Edita tu tarea:", tareaTexto);
if (nuevoTexto !== null && nuevoTexto.trim() !== '') {
textoTarea.textContent = nuevoTexto.trim(); // Actualizar el texto de la tarea
guardarTareas(); // Guardar tareas en localStorage
}
});
// Botón de eliminar
const eliminarBtn = document.createElement('button');
eliminarBtn.textContent = 'Eliminar';
eliminarBtn.className = 'eliminar';
eliminarBtn.addEventListener('click', function(event) {
event.stopPropagation(); // Evitar que el clic en el botón active el evento de la tarea
listaTareas.removeChild(li);
guardarTareas(); // Guardar tareas en localStorage
});
// Añadir evento de clic para marcar como completada
li.addEventListener('click', function() {
li.classList.toggle('completada'); // Alternar la clase 'completada'
const tic = document.createElement('span');
tic.className = 'tic';
tic.textContent = '✔'; // Carácter Unicode para el tic
if (li.classList.contains('completada')) {
// Si la tarea está completada, añadir el tic
if (textoTarea.firstChild.nodeName === "#text") {
li.insertBefore(tic, textoTarea); // Añadir el tic antes del texto
}
textoTarea.classList.add('completada'); // Aplicar clase de completada al texto
} else {
// Si la tarea no está completada, eliminar el tic
const tics = li.getElementsByClassName('tic');
if (tics.length > 0) {
li.removeChild(tics[0]); // Eliminar el tic si la tarea no está completada
}
textoTarea.classList.remove('completada'); // Remover clase de completada del texto
}
guardarTareas(); // Guardar tareas en localStorage
});
li.appendChild(textoTarea); // Añadir el texto de la tarea al li
li.appendChild(editarBtn); // Añadir el botón de editar al li
li.appendChild(eliminarBtn); // Añadir el botón de eliminar al li
return li;
}
function guardarTareas() {
const tareas = [];
const items = listaTareas.getElementsByTagName('li');
for (let item of items) {
const texto = item.querySelector('.texto-tarea').textContent;
const completada = item.classList.contains('completada');
tareas.push({ texto, completada });
}
localStorage.setItem('tareas', JSON.stringify(tareas)); // Guardar en localStorage
}
function cargarTareas() {
const tareasGuardadas = JSON.parse(localStorage.getItem('tareas')) || [];
tareasGuardadas.forEach(tarea => {
const li = crearTarea(tarea.texto);
if (tarea.completada) {
li.classList.add('completada');
const tic = document.createElement('span');
tic.className = 'tic';
tic.textContent = '✔'; // Carácter Unicode para el tic
li.insertBefore(tic, li.querySelector('.texto-tarea')); // Añadir el tic antes del texto
li.querySelector('.texto-tarea').classList.add('completada'); // Aplicar clase de completada al texto
}
listaTareas.appendChild(li); // Añadir el li a la lista de tareas
});
}
};
window.onload = function() {
const nombre = prompt("¿Cuál es tu nombre?");
alert(`¡Bienvenido, ${nombre}!`);
const agregarBtn = document.getElementById('agregarBtn');
const tareaEntrada = document.getElementById('tareaEntrada');
const listaTareas = document.getElementById('listaTareas');
// Cargar tareas desde localStorage
cargarTareas();
agregarBtn.addEventListener('click', function() {
const tareaTexto = tareaEntrada.value.trim(); // Eliminar espacios en blanco
if (tareaTexto) {
const li = crearTarea(tareaTexto);
listaTareas.appendChild(li); // Añadir el li a la lista de tareas
tareaEntrada.value = ''; // Limpiar el campo de entrada
guardarTareas(); // Guardar tareas en localStorage
} else {
alert("Por favor, escribe una tarea."); // Mensaje si el campo está vacío
}
});
function crearTarea(tareaTexto) {
const li = document.createElement('li');
// Contenedor para el texto de la tarea
const textoTarea = document.createElement('span');
textoTarea.className = 'texto-tarea';
textoTarea.textContent = tareaTexto;
// Botón de editar
const editarBtn = document.createElement('button');
editarBtn.textContent = 'Editar';
editarBtn.className = 'editar';
editarBtn.addEventListener('click', function(event) {
event.stopPropagation(); // Evitar que el clic en el botón active el evento de la tarea
const nuevoTexto = prompt("Edita tu tarea:", tareaTexto);
if (nuevoTexto !== null && nuevoTexto.trim() !== '') {
textoTarea.textContent = nuevoTexto.trim(); // Actualizar el texto de la tarea
guardarTareas(); // Guardar tareas en localStorage
}
});
// Botón de eliminar
const eliminarBtn = document.createElement('button');
eliminarBtn.textContent = 'Eliminar';
eliminarBtn.className = 'eliminar';
eliminarBtn.addEventListener('click', function(event) {
event.stopPropagation(); // Evitar que el clic en el botón active el evento de la tarea
listaTareas.removeChild(li);
guardarTareas(); // Guardar tareas en localStorage
});
// Añadir evento de clic para marcar como completada
li.addEventListener('click', function() {
li.classList.toggle('completada'); // Alternar la clase 'completada'
const tic = document.createElement('span');
tic.className = 'tic';
tic.textContent = '✔'; // Carácter Unicode para el tic
if (li.classList.contains('completada')) {
// Si la tarea está completada, añadir el tic
if (textoTarea.firstChild.nodeName === "#text") {
li.insertBefore(tic, textoTarea); // Añadir el tic antes del texto
}
textoTarea.classList.add('completada'); // Aplicar clase de completada al texto
} else {
// Si la tarea no está completada, eliminar el tic
const tics = li.getElementsByClassName('tic');
if (tics.length > 0) {
li.removeChild(tics[0]); // Eliminar el tic si la tarea no está completada
}
textoTarea.classList.remove('completada'); // Remover clase de completada del texto
}
guardarTareas(); // Guardar tareas en localStorage
});
li.appendChild(textoTarea); // Añadir el texto de la tarea al li
li.appendChild(editarBtn); // Añadir el botón de editar al li
li.appendChild(eliminarBtn); // Añadir el botón de eliminar al li
return li;
}
function guardarTareas() {
const tareas = [];
const items = listaTareas.getElementsByTagName('li');
for (let item of items) {
const texto = item.querySelector('.texto-tarea').textContent;
const completada = item.classList.contains('completada');
tareas.push({ texto, completada });
}
localStorage.setItem('tareas', JSON.stringify(tareas)); // Guardar en localStorage
}
function cargarTareas() {
const tareasGuardadas = JSON.parse(localStorage.getItem('tareas')) || [];
tareasGuardadas.forEach(tarea => {
const li = crearTarea(tarea.texto);
if (tarea.completada) {
li.classList.add('completada');
const tic = document.createElement('span');
tic.className = 'tic';
tic.textContent = '✔'; // Carácter Unicode para el tic
li.insertBefore(tic, li.querySelector('.texto-tarea')); // Añadir el tic antes del texto
li.querySelector('.texto-tarea').classList.add('completada'); // Aplicar clase de completada al texto
}
listaTareas.appendChild(li); // Añadir el li a la lista de tareas
});
}
};
estilos.css
/* estilos.css */
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
text-align: center;
}
header {
text-align: center;
margin-bottom: 20px;
// justify-content: center; /* Centrar horizontalmente */
}
input {
padding: 10px;
width: 300px;
}
div {
// justify-content: center;
// align-items: center;
}
main {
width: 50%; /* Ancho del 50% de la pantalla */
background-color: white; /* Color de fondo blanco */
border: 1px solid #ccc; /* Borde gris */
border-radius: 10px; /* Esquinas redondeadas */
padding: 20px; /* Espaciado interno */
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); /* Sombra suave */
margin: 0 auto; /* Centrar el elemento main */
}
button {
padding: 10px;
margin-left: 10px;
background-color: green; /* Fondo para los botones */
color: white; /* Texto en blanco */
font-weight: bold; /* Texto en negrita */
border: none; /* Sin borde */
border-radius: 15px; /* Esquinas redondeadas */
cursor: pointer; /* Cambia el cursor al pasar sobre el botón */
}
ul {
list-style-type: none;
padding: 0;
}
li {
text-align: left;
background: #fff;
margin: 5px 0;
padding: 10px;
border: 1px solid #ccc;
display: flex;
justify-content: space-between;
//align-items: center; /* Alinear verticalmente */
transition: background-color 1.5s;
}
button.eliminar {
background-color: red;
color: white;
}
button.editar {
background-color: blue;
color: white;
}
li.completada {
background-color: #d4edda; /* Color de fondo para tareas completadas */
}
.tic {
color: green; /* Color verde para el tic */
margin-right: 10px; /* Espacio entre el tic y el texto */
}
.texto-tarea {
flex-grow: 1; /* Permitir que el texto ocupe el espacio disponible */
}
.texto-tarea.completada {
text-decoration: line-through; /* Tachamos el texto de la tarea completada */
color: gray; /* Cambia el color del texto a gris */
}
footer {
position: fixed; /* Posición fija del footer */
bottom: 0; /* Con esto lo anclamos abajo del todo de la ventana */
width: 100%; /* Ancho al 100% de la apertura de la ventana en todo momento */
text-align: center; /* Centramos el texto al centro de la apertura de la venta, con lo que si o si, siempre estara centrado */
}
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
text-align: center;
}
header {
text-align: center;
margin-bottom: 20px;
// justify-content: center; /* Centrar horizontalmente */
}
input {
padding: 10px;
width: 300px;
}
div {
// justify-content: center;
// align-items: center;
}
main {
width: 50%; /* Ancho del 50% de la pantalla */
background-color: white; /* Color de fondo blanco */
border: 1px solid #ccc; /* Borde gris */
border-radius: 10px; /* Esquinas redondeadas */
padding: 20px; /* Espaciado interno */
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); /* Sombra suave */
margin: 0 auto; /* Centrar el elemento main */
}
button {
padding: 10px;
margin-left: 10px;
background-color: green; /* Fondo para los botones */
color: white; /* Texto en blanco */
font-weight: bold; /* Texto en negrita */
border: none; /* Sin borde */
border-radius: 15px; /* Esquinas redondeadas */
cursor: pointer; /* Cambia el cursor al pasar sobre el botón */
}
ul {
list-style-type: none;
padding: 0;
}
li {
text-align: left;
background: #fff;
margin: 5px 0;
padding: 10px;
border: 1px solid #ccc;
display: flex;
justify-content: space-between;
//align-items: center; /* Alinear verticalmente */
transition: background-color 1.5s;
}
button.eliminar {
background-color: red;
color: white;
}
button.editar {
background-color: blue;
color: white;
}
li.completada {
background-color: #d4edda; /* Color de fondo para tareas completadas */
}
.tic {
color: green; /* Color verde para el tic */
margin-right: 10px; /* Espacio entre el tic y el texto */
}
.texto-tarea {
flex-grow: 1; /* Permitir que el texto ocupe el espacio disponible */
}
.texto-tarea.completada {
text-decoration: line-through; /* Tachamos el texto de la tarea completada */
color: gray; /* Cambia el color del texto a gris */
}
footer {
position: fixed; /* Posición fija del footer */
bottom: 0; /* Con esto lo anclamos abajo del todo de la ventana */
width: 100%; /* Ancho al 100% de la apertura de la ventana en todo momento */
text-align: center; /* Centramos el texto al centro de la apertura de la venta, con lo que si o si, siempre estara centrado */
}