Лучший способ чему-то научиться - это делать. В этом руководстве мы будем создавать приложение To-Do List с использованием чистого JavaScript. Если вы новичок и устали учиться на скучных теоретических уроках, то вы попали в нужное место, потому что здесь мы практически создадим это приложение To-Do с нуля. Не волнуйтесь, я объяснил каждый шаг по разработке нашего приложения To-do.

В этом приложении мы сможем добавлять новые задачи, которые нужно выполнить, удалять задачи, отмечать задачи после завершения, у нас будет раскрывающееся меню для фильтрации наших задач на основе выполненных или незавершенных задач.

Итак, без промедления приступим к написанию кода.

Нам нужно создать папку и создать в ней три файла:

  1. index.html
  2. styles.css
  3. main.js

HTML-файл для нашего приложения

Поскольку это руководство в основном сосредоточено на обучении концепциям JavaScript, я предполагаю, что вы должны быть знакомы с синтаксисом HTML и легко понимать приведенный выше код, но все же мы кратко обсудим, что происходит в этом файле html.

В теге body нашего файла есть три основных раздела: 1. Заголовок 2. Форма 3. Контейнер задачи и, наконец, мы просто связываем наш файл JavaScript.

Заголовок раздела, как вы уже догадались, содержит название нашего приложения.

В разделе формы у нас есть элемент ввода для ввода новой задачи, кнопка для отображения этой задачи ниже, раскрывающийся список, который фильтрует наши задачи на основе выполненных или незавершенных задач.

В разделе контейнера задач у нас есть все наши задачи, которые динамически добавляются на нашу страницу, когда пользователь добавляет задачу через JavaScript.

CSS-файл для стилизации

Это мой стиль для нашего приложения To-Do List, который вы можете легко понять, просто прочитав один раз, поскольку я также добавил комментарии, определяющие роль кода. Вы также можете придумать свою укладку. И, пожалуйста, отправьте ссылку на свой стиль в разделе комментариев. Я хотел бы увидеть все ваши творческие стили.

Файл JavaScript для функциональности

А вот и захватывающая часть, ради которой вы, ребята, читаете это. Файл JavaScript отвечает за все функции нашего приложения.

1. Сохранение элементов в константах

Сначала давайте сохраним элементы HTML, которые мы будем использовать в различных функциях.

//selectors
const todoInput = document.querySelector('.todo_input');
const todoButton = document.querySelector('.todo_button');
const todoList = document.querySelector('.todo_list');
const filterOption = document.querySelector('.filter_todo');

Здесь с помощью метода document.querySelector () мы сохраняем элементы html с определенным классом для их соответствующих констант. Теперь константы todoInput, todoButton, todoList, filterOption содержат элементы html.

2. Добавление прослушивателей событий к элементам

Теперь мы добавим прослушиватели событий щелчка к нашим кнопкам и раскрывающемуся фильтру.

//event listeners
todoButton.addEventListener("click", addTodo)
todoList.addEventListener("click", deleteCheck)
filterOption.addEventListener("click", filterTodo)

Метод addEventListener() присоединяет обработчик событий к указанному элементу. Теперь, когда мы нажмем кнопку «+» в нашем вводе, будет выполнена функция addTodo. Когда мы щелкнем любую задачу, которая добавлена ​​в контейнер задач нашего приложения, будет выполнена функция deleteCheck. Когда мы щелкнем элемент выбора (раскрывающийся список) в нашем приложении, функция filterTodo выполнит

3. Добавление задачи с кнопкой проверки и кнопкой удаления.

function addTodo(event) {
event.preventDefault();
//todo DIV
const todoDiv = document.createElement('div');
todoDiv.classList.add('todo');
//todo LI
const newTodo = document.createElement('li');
newTodo.innerText = todoInput.value;
newTodo.classList.add('todo_item');
todoDiv.appendChild(newTodo);
if(todoInput.value === ""){
return null;
}
//check mark BUTTON
const completedButton = document.createElement('button');
completedButton.innerHTML = '<i class="fas fa-check"></i>';
completedButton.classList.add('complete_btn')
todoDiv.appendChild(completedButton);
//delete BUTTON
const deleteButton = document.createElement('button');
deleteButton.innerHTML = '<i class="fas fa-trash"></i>';
deleteButton.classList.add('delete_btn')
todoDiv.appendChild(deleteButton);
//Append to Actual LIST
todoList.appendChild(todoDiv);
//Clear todo input VALUE
todoInput.value = ""
}

Эта функция addTodo будет выполняться, когда будет нажата кнопка добавления при вводе. Эта функция отвечает за добавление задачи, добавление кнопки проверки и добавление кнопки удаления.

Во-первых, мы вызываем метод event.preventDefault (), который отменяет событие, если оно может быть отменено. В нашем случае, поскольку наша кнопка добавления имеет тип отправки, когда мы нажимаем на нее, наша страница отправляется и обновляется, и это то, чего мы не хотим в нашем приложении, именно здесь метод event.preventDefault () входит в игру, метод предотвращает его от отправки формы.

Затем с помощью метода document.createElement () мы создаем элемент html ‹div›, который будет содержать задачу, кнопку проверки и удаления. Затем мы создаем html ‹li›, который является нашей реальной задачей, которую мы получаем из todoInput.value, который просто берет все типы пользователей в поле ввода и сохраняет их в этом ‹li› элемент. Аналогичным образом мы создаем кнопки проверки и удаления. Наконец, мы проверяем, не пусто ли наше поле ввода, что означает, что там написана какая-то задача, и если да, мы добавляем наш ‹li› (список) и обе кнопки в ‹ div ›, который мы только что создали.

4. Удаление и проверка задачи соответственно.

//DELETE & CHECK
function deleteCheck(e) {
const item = e.target;
//DELETE ITEM
if (item.classList[0] === "delete_btn") {
const todo = item.parentElement;
//ANIMATION TRANSITION
todo.classList.add("fall")
todo.addEventListener('transitionend', function () {
todo.remove()
})
}
//COMPLETE ITEM
if (item.classList[0] === "complete_btn") {
const todo = item.parentElement;
todo.classList.toggle("completedItem")
}
}

Поскольку мы добавили прослушиватель событий в наш todoList ‹div›, всякий раз, когда мы нажимаем кнопку проверки или удаления, эта функция будет выполняться. Однако при нажатии на задачу в ‹div› также выполняется эта функция, но поскольку мы обрабатываем ситуацию, когда нажимается любая из кнопок, нажатие на задачу ничего не сделает.

В этой функции мы получаем целевой элемент с помощью e.target. Затем мы проверяем, является ли целевой элемент кнопкой удаления или кнопкой проверки. Если это кнопка удаления (delete_btn), то мы просто получаем его родительский элемент со свойством .parentElement и удаляем его с помощью метода .remove () после перехода завершено, которое добавляется добавлением класса «fall» ко всему ‹div›. Если мы нажмем кнопку проверки (complete_btn), тогда мы просто переключаем класс на родительский элемент, которым является сам ‹div›, который применяет к задаче некоторый стиль, чтобы подтвердить, что эта задача завершено.

5. Фильтрация задач по выбранному варианту.

//FILTERING THE TASKS ACCORDING THE OPTION
function filterTodo(e) {
const todos = todoList.childNodes;
for(let i = 1; i<todos.length; i++ ){
switch (e.target.value) {
case "all":
todos[i].style.display = "flex";
break;
case "completed":
if (todos[i].classList.contains('completedItem')) {
todos[i].style.display = "flex";
} else {
todos[i].style.display = "none";
}
break;
case "uncompleted":
if (!todos[i].classList.contains('completedItem')) {
todos[i].style.display = "flex";
} else {
todos[i].style.display = "none";
}
break;
}
}
}

Когда мы щелкаем по одному из вариантов раскрывающегося списка, эта функция filterTodo будет выполняться. Эта функция отвечает за фильтрацию задач по всем задачам, выполненным и незавершенным задачам. В постоянных задачах мы храним все задачи. Затем, используя цикл for, мы перебираем их. В цикле мы проверяем, какая опция выбрана в раскрывающемся списке, и просто фильтруем элементы, реализуя стиль отображения для задач.

Например: - Если вы нажали опцию «Завершено» в раскрывающемся списке, он проверит, какие задачи имеют класс completed_item, и добавит к нему стиль гибкости, в противном случае он добавит к нему стиль отображения none.

todos[i].style.display = "flex";
} else {
todos[i].style.display = "none";
}

Другие параметры фильтруют задачи тем же способом.

Теперь наше приложение отлично работает без каких-либо проблем.

На сегодня все. Надеюсь, это было полезно для парней. Я буду публиковать свои идеи по разным темам, и мы вместе создадим множество крутых приложений.

Добрый день, хорошее кодирование…

Строковые и числовые методы в JavaScript



Методы массивов в JavaScript