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>

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
        });
    }
};

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 */
}
wpChatIcon
wpChatIcon