Начни изучать JavaScript прямо сейчас: 10 простых примеров кода для новичков

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Новички в программировании, желающие освоить JavaScript
  • Люди, заинтересованные в веб-разработке и создании интерактивных веб-приложений
  • Студенты или ученики, ищущие практические примеры и задачи для обучения языку программирования

    JavaScript открывает двери в мир интерактивного веб-программирования даже для тех, кто никогда не писал ни строчки кода. Но первые шаги часто самые сложные — пугает непонятный синтаксис, странные термины и бесконечный поток информации. 🚀 Именно поэтому я собрал 10 простых, но эффективных программ, которые можно не только скопировать и запустить, но и разобрать по косточкам, чтобы увидеть, как JavaScript работает изнутри. Эти примеры — ваш пропуск в мир разработки без лишней головной боли.

Если вы действительно хотите не просто скопировать код, а понять структуру JavaScript и освоить профессию с нуля, обратите внимание на курс Обучение веб-разработке от Skypro. Там вы не просто изучите базовые конструкции, а построите полноценные проекты под руководством опытных менторов. Мои ученики, прошедшие подобный путь, уже через 8-10 месяцев находили первые позиции джуниор-разработчиков. Не ограничивайте себя копипастой примеров!

Первые шаги в JavaScript: 10 полезных программ для старта

Начнем с самых простых примеров, которые помогут вам почувствовать JavaScript и понять его базовую структуру. Эти программы можно запустить прямо в консоли браузера (F12 → Console) или в любой онлайн-среде разработки.

  1. Привет, мир! — классическое начало изучения любого языка программирования:
JS
Скопировать код
// Выводит сообщение в консоль
console.log("Привет, мир!");

// Показывает всплывающее окно
alert("Привет, JavaScript!");

  1. Простой калькулятор — сложение двух чисел:
JS
Скопировать код
// Запрашиваем у пользователя два числа
let num1 = prompt("Введите первое число:");
let num2 = prompt("Введите второе число:");

// Преобразуем строковые значения в числа
num1 = Number(num1);
num2 = Number(num2);

// Вычисляем и выводим результат
let sum = num1 + num2;
alert("Сумма: " + sum);

  1. Проверка на чётность — определяет, является ли число чётным:
JS
Скопировать код
let number = prompt("Введите число для проверки на чётность:");
number = parseInt(number);

if (number % 2 === 0) {
alert(number + " — чётное число");
} else {
alert(number + " — нечётное число");
}

  1. Генератор случайных чисел — создаёт случайное число в заданном диапазоне:
JS
Скопировать код
// Получаем минимальное и максимальное значения
let min = parseInt(prompt("Введите минимальное значение:"));
let max = parseInt(prompt("Введите максимальное значение:"));

// Генерируем и выводим случайное число
let randomNumber = Math.floor(Math.random() * (max – min + 1)) + min;
alert("Случайное число между " + min + " и " + max + ": " + randomNumber);

  1. Конвертер температуры — переводит градусы Цельсия в Фаренгейты и обратно:
JS
Скопировать код
let celsius = parseFloat(prompt("Введите температуру в градусах Цельсия:"));
let fahrenheit = (celsius * 9/5) + 32;
alert(celsius + "°C = " + fahrenheit + "°F");

// Конвертация в обратном направлении
let fahrenheitInput = parseFloat(prompt("Введите температуру в градусах Фаренгейта:"));
let celsiusOutput = (fahrenheitInput – 32) * 5/9;
alert(fahrenheitInput + "°F = " + celsiusOutput.toFixed(2) + "°C");

Михаил Петров, веб-разработчик и преподаватель

Помню своего студента Артёма, который после нескольких неудачных попыток освоить JavaScript готов был всё бросить. "Я просто не понимаю, что происходит в этом коде," — жаловался он. Вместо сложных объяснений я предложил ему простое упражнение: взять калькулятор из примера №2 и модифицировать его, добавив остальные арифметические операции.

Через неделю Артём не только сделал многофункциональный калькулятор с интерфейсом, но и смог объяснить другим студентам, как работают переменные, условия и функции в JavaScript. "Это как конструктор — когда ты разбираешь и собираешь простые примеры, начинаешь видеть логику," — сказал он позже. Сегодня Артём работает фронтенд-разработчиком в крупной IT-компании.

  1. Игра "Угадай число" — простая игра для проверки логики:
JS
Скопировать код
// Генерируем случайное число от 1 до 100
let secretNumber = Math.floor(Math.random() * 100) + 1;
let attempts = 0;
let guess;

// Запускаем цикл игры
do {
guess = parseInt(prompt("Угадайте число от 1 до 100:"));
attempts++;

if (guess < secretNumber) {
alert("Загаданное число больше!");
} else if (guess > secretNumber) {
alert("Загаданное число меньше!");
} else {
alert("Поздравляем! Вы угадали число " + secretNumber + " за " + attempts + " попыток.");
}
} while (guess !== secretNumber);

  1. Проверка палиндрома — определяет, является ли строка палиндромом:
JS
Скопировать код
let text = prompt("Введите текст для проверки на палиндром:");
// Приводим к нижнему регистру и убираем пробелы
text = text.toLowerCase().replace(/\s/g, '');

// Переворачиваем строку и сравниваем с оригиналом
let reversed = text.split('').reverse().join('');

if (text === reversed) {
alert("Это палиндром!");
} else {
alert("Это не палиндром.");
}

  1. Таймер обратного отсчёта — отсчитывает время до указанного события:
JS
Скопировать код
let seconds = parseInt(prompt("Введите количество секунд для обратного отсчёта:"));
let countdown = setInterval(function() {
if (seconds <= 0) {
clearInterval(countdown);
alert("Время вышло!");
} else {
console.log("Осталось секунд: " + seconds);
seconds--;
}
}, 1000);

  1. Калькулятор дней между датами — вычисляет количество дней между двумя датами:
JS
Скопировать код
let date1 = new Date(prompt("Введите первую дату в формате ГГГГ-ММ-ДД:"));
let date2 = new Date(prompt("Введите вторую дату в формате ГГГГ-ММ-ДД:"));

// Вычисляем разницу в миллисекундах и переводим в дни
let timeDiff = Math.abs(date2.getTime() – date1.getTime());
let dayDiff = Math.ceil(timeDiff / (1000 * 3600 * 24));

alert("Между указанными датами " + dayDiff + " дней.");

  1. Конвертер валют — переводит сумму из одной валюты в другую:
JS
Скопировать код
// Курсы валют (упрощённо)
const rates = {
USD: 1,
EUR: 0.85,
GBP: 0.73,
JPY: 110.5,
RUB: 73.2
};

let amount = parseFloat(prompt("Введите сумму:"));
let fromCurrency = prompt("Введите исходную валюту (USD, EUR, GBP, JPY, RUB):").toUpperCase();
let toCurrency = prompt("Введите целевую валюту (USD, EUR, GBP, JPY, RUB):").toUpperCase();

// Конвертация через USD как базовую валюту
let inUSD = amount / rates[fromCurrency];
let result = inUSD * rates[toCurrency];

alert(amount + " " + fromCurrency + " = " + result.toFixed(2) + " " + toCurrency);

Эти базовые примеры закладывают фундамент понимания JavaScript. Каждый из них иллюстрирует важные концепции и синтаксис языка, которые вы будете использовать при написании более сложного кода. 🧩

Пошаговый план для смены профессии

Базовые программы на JavaScript: от переменных до циклов

В этом разделе мы углубимся в структуру JavaScript-программ и рассмотрим, как работают основные конструкции языка в контексте простых задач. 🔍

Элемент языка Назначение Пример использования
Переменные (var, let, const) Хранение данных в памяти let age = 25;
Условные операторы (if-else) Выполнение кода при определённых условиях if (age >= 18) { /* код */ }
Циклы (for, while) Повторное выполнение блока кода for (let i = 0; i < 5; i++) { /* код */ }
Функции Многократно используемые блоки кода function greet(name) { return "Hello, " + name; }
Массивы Хранение упорядоченных наборов данных let colors = ["red", "green", "blue"];

Рассмотрим эти элементы на примере реальных программ:

  1. Работа с массивами и циклами — поиск наибольшего числа в массиве:
JS
Скопировать код
// Создаём массив чисел
let numbers = [12, 45, 3, 78, 23, 56, 9];

// Инициализируем переменную для хранения наибольшего числа
let max = numbers[0];

// Используем цикл для перебора всех элементов массива
for (let i = 1; i < numbers.length; i++) {
// Если текущий элемент больше, чем максимальный, обновляем максимум
if (numbers[i] > max) {
max = numbers[i];
}
}

console.log("Наибольшее число в массиве: " + max);

  1. Функции и параметры — создание универсальной функции для вычисления площади:
JS
Скопировать код
// Определяем функцию для вычисления площади прямоугольника
function calculateArea(width, height) {
return width * height;
}

// Определяем функцию для вычисления площади круга
function calculateCircleArea(radius) {
return Math.PI * radius * radius;
}

// Используем функции
let rectangleArea = calculateArea(5, 10);
let circleArea = calculateCircleArea(7);

console.log("Площадь прямоугольника: " + rectangleArea);
console.log("Площадь круга: " + circleArea.toFixed(2));

  1. Работа со строками — подсчёт гласных в строке:
JS
Скопировать код
function countVowels(text) {
// Приводим текст к нижнему регистру
text = text.toLowerCase();

// Определяем гласные
const vowels = ['a', 'e', 'i', 'o', 'u', 'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я'];

// Инициализируем счётчик
let count = 0;

// Перебираем каждый символ в строке
for (let i = 0; i < text.length; i++) {
// Если символ является гласной, увеличиваем счётчик
if (vowels.includes(text[i])) {
count++;
}
}

return count;
}

let text = prompt("Введите текст для подсчёта гласных:");
let vowelCount = countVowels(text);
alert("В тексте содержится " + vowelCount + " гласных букв.");

  1. Объекты и их методы — создание простого объекта "книга":
JS
Скопировать код
// Создаём объект, описывающий книгу
let book = {
title: "JavaScript для начинающих",
author: "Иван Петров",
year: 2023,
pages: 320,

// Метод для получения информации о книге
getInfo: function() {
return this.title + " от " + this.author + ", " + this.year + " год, " + this.pages + " стр.";
},

// Метод для определения возраста книги
getAge: function() {
return new Date().getFullYear() – this.year;
}
};

// Используем методы объекта
console.log(book.getInfo());
console.log("Этой книге " + book.getAge() + " лет.");

  1. Вложенные циклы — построение таблицы умножения:
JS
Скопировать код
// Создаём строку для хранения таблицы умножения
let multiplicationTable = "";

// Внешний цикл для строк
for (let i = 1; i <= 10; i++) {
// Внутренний цикл для столбцов
for (let j = 1; j <= 10; j++) {
// Добавляем результат умножения в строку с выравниванием
multiplicationTable += (i * j).toString().padStart(4, ' ');
}
// Добавляем перенос строки после каждой строки таблицы
multiplicationTable += "\n";
}

console.log(multiplicationTable);

Понимание этих базовых конструкций позволит вам строить более сложные программы, комбинируя их различными способами. Важно практиковаться в написании кода, экспериментировать с примерами и анализировать, как изменение параметров влияет на результат. 💪

Интерактивные скрипты JavaScript: простые решения

JavaScript особенно мощный в создании интерактивного опыта на веб-страницах. Взаимодействие с DOM (Document Object Model) позволяет динамически менять содержимое и поведение страницы без перезагрузки. 🎯

Вот несколько простых интерактивных скриптов, которые демонстрируют, как JavaScript может оживить статическую HTML-страницу:

  1. Изменение цвета элемента при клике:
JS
Скопировать код
// HTML: <button id="colorButton">Изменить цвет</button>
// HTML: <div id="colorBox" style="width: 100px; height: 100px; background-color: blue;"></div>

// Получаем ссылки на элементы
const button = document.getElementById("colorButton");
const box = document.getElementById("colorBox");

// Добавляем обработчик события клика
button.addEventListener("click", function() {
// Генерируем случайный цвет
const randomColor = "#" + Math.floor(Math.random()*16777215).toString(16);

// Меняем цвет элемента
box.style.backgroundColor = randomColor;
});

  1. Простой слайдер изображений:
JS
Скопировать код
// HTML: <div id="slider">
// <img id="slideImage" src="image1.jpg" alt="Slide">
// <button id="prevButton">Предыдущее</button>
// <button id="nextButton">Следующее</button>
// </div>

// Массив путей к изображениям
const images = ["image1.jpg", "image2.jpg", "image3.jpg", "image4.jpg"];
let currentImageIndex = 0;

// Получаем ссылки на элементы
const slideImage = document.getElementById("slideImage");
const prevButton = document.getElementById("prevButton");
const nextButton = document.getElementById("nextButton");

// Функция для смены изображения
function showImage(index) {
slideImage.src = images[index];
}

// Обработчик для кнопки "Следующее"
nextButton.addEventListener("click", function() {
currentImageIndex++;
if (currentImageIndex >= images.length) {
currentImageIndex = 0;
}
showImage(currentImageIndex);
});

// Обработчик для кнопки "Предыдущее"
prevButton.addEventListener("click", function() {
currentImageIndex--;
if (currentImageIndex < 0) {
currentImageIndex = images.length – 1;
}
showImage(currentImageIndex);
});

  1. Форма с валидацией:
JS
Скопировать код
// HTML: <form id="registrationForm">
// <input type="text" id="username" placeholder="Имя пользователя">
// <input type="email" id="email" placeholder="Email">
// <input type="password" id="password" placeholder="Пароль">
// <button type="submit">Зарегистрироваться</button>
// <div id="errorMessage"></div>
// </form>

// Получаем ссылку на форму и элемент для вывода ошибок
const form = document.getElementById("registrationForm");
const errorMessage = document.getElementById("errorMessage");

// Добавляем обработчик события отправки формы
form.addEventListener("submit", function(event) {
// Отменяем стандартное поведение формы
event.preventDefault();

// Получаем значения полей
const username = document.getElementById("username").value;
const email = document.getElementById("email").value;
const password = document.getElementById("password").value;

// Очищаем предыдущие сообщения об ошибках
errorMessage.textContent = "";

// Проверяем длину имени пользователя
if (username.length < 3) {
errorMessage.textContent = "Имя пользователя должно содержать минимум 3 символа";
return;
}

// Проверяем корректность email через регулярное выражение
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
errorMessage.textContent = "Пожалуйста, введите корректный email";
return;
}

// Проверяем надёжность пароля
if (password.length < 8) {
errorMessage.textContent = "Пароль должен содержать минимум 8 символов";
return;
}

// Если все проверки пройдены, "отправляем" данные
alert("Регистрация успешна!");
form.reset();
});

Анна Сидорова, фронтенд-разработчик

Когда я только начинала свой путь в JavaScript, для меня всё казалось сложным и запутанным. Особенно работа с DOM. Мой наставник дал мне задание — разработать простое приложение для ведения списка дел. Я начала с малого: сделала поле ввода и кнопку для добавления задачи.

Помню момент, когда после нескольких часов борьбы, мой код наконец заработал — появилась возможность добавлять задачи в список, отмечать их выполненными и удалять. Это было настолько захватывающе! Тогда я поняла — не нужно пытаться понять всё сразу. Начинайте с самых базовых интерактивных элементов, и постепенно ваше понимание будет расти. Сейчас я веду свои мастер-классы, где первое, что я показываю новичкам — как написать интерактивный счётчик кликов. Их реакция всегда одинаковая: "Неужели это так просто?"

  1. Счётчик кликов:
JS
Скопировать код
// HTML: <button id="clickButton">Нажми меня</button>
// HTML: <div id="clickCounter">Кликов: 0</div>

// Получаем ссылки на элементы
const clickButton = document.getElementById("clickButton");
const clickCounter = document.getElementById("clickCounter");

// Инициализируем счётчик
let clicks = 0;

// Добавляем обработчик события клика
clickButton.addEventListener("click", function() {
// Увеличиваем счётчик
clicks++;

// Обновляем отображаемое значение
clickCounter.textContent = "Кликов: " + clicks;

// Меняем стиль кнопки при каждом десятом клике
if (clicks % 10 === 0) {
clickButton.style.backgroundColor = "gold";
setTimeout(() => {
clickButton.style.backgroundColor = "";
}, 300);
}
});

  1. Часы реального времени:
JS
Скопировать код
// HTML: <div id="clock"></div>

// Получаем ссылку на элемент для отображения времени
const clock = document.getElementById("clock");

// Функция для обновления времени
function updateClock() {
// Получаем текущее время
const now = new Date();

// Форматируем часы, минуты и секунды
const hours = now.getHours().toString().padStart(2, '0');
const minutes = now.getMinutes().toString().padStart(2, '0');
const seconds = now.getSeconds().toString().padStart(2, '0');

// Обновляем текстовое содержимое элемента
clock.textContent = hours + ":" + minutes + ":" + seconds;

// Меняем цвет в зависимости от секунд (просто для забавы)
const hue = (now.getSeconds() * 6); // 0-360
clock.style.color = `hsl(${hue}, 70%, 50%)`;
}

// Вызываем функцию сразу и затем каждую секунду
updateClock();
setInterval(updateClock, 1000);

Интерактивный элемент Ключевые концепции Сложность реализации
Изменение цвета addEventListener, DOM-манипуляции Начальный
Слайдер изображений Массивы, условная логика, обработка событий Начальный
Форма с валидацией Регулярные выражения, предотвращение отправки формы Средний
Счётчик кликов Переменные, DOM-манипуляции, условия Начальный
Часы реального времени Date объект, setInterval, форматирование строк Начальный-средний

Эти интерактивные скрипты демонстрируют фундаментальные принципы взаимодействия JavaScript с HTML и CSS. Они показывают, как создавать динамические элементы, обрабатывать пользовательский ввод и обновлять содержимое страницы без её перезагрузки. 🔄

Практические задачи для освоения синтаксиса JavaScript

Чтобы действительно освоить JavaScript, недостаточно просто читать и копировать готовые примеры — нужно решать практические задачи, постепенно повышая их сложность. 📚 Каждая решенная задача укрепляет понимание синтаксиса и логики языка.

Вот набор разноуровневых задач, которые помогут закрепить основы JavaScript:

Уровень 1: Основы

  1. Подсчёт чётных чисел в массиве:
JS
Скопировать код
function countEvenNumbers(arr) {
let count = 0;

for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 === 0) {
count++;
}
}

return count;
}

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log("Количество чётных чисел: " + countEvenNumbers(numbers));

  1. Реверс строки:
JS
Скопировать код
function reverseString(str) {
// Преобразуем строку в массив символов, переворачиваем и объединяем
return str.split('').reverse().join('');

// Альтернативный способ через цикл:
// let reversed = '';
// for (let i = str.length – 1; i >= 0; i--) {
// reversed += str[i];
// }
// return reversed;
}

const original = "JavaScript";
console.log(reverseString(original)); // tpircSavaJ

  1. Подсчёт суммы цифр числа:
JS
Скопировать код
function sumDigits(number) {
// Преобразуем число в строку для перебора цифр
const digits = Math.abs(number).toString();
let sum = 0;

for (let i = 0; i < digits.length; i++) {
sum += parseInt(digits[i]);
}

return sum;
}

console.log(sumDigits(12345)); // 15 (1+2+3+4+5)
console.log(sumDigits(-987)); // 24 (9+8+7)

Уровень 2: Работа с массивами и объектами

  1. Фильтрация массива:
JS
Скопировать код
function filterByLength(arr, minLength) {
// Возвращаем новый массив, содержащий только элементы
// с длиной не менее minLength
return arr.filter(item => item.length >= minLength);
}

const words = ["apple", "banana", "kiwi", "grape", "pineapple"];
console.log(filterByLength(words, 6)); // ["banana", "pineapple"]

  1. Поиск уникальных элементов:
JS
Скопировать код
function findUnique(arr) {
// Используем Set для хранения уникальных значений
return [...new Set(arr)];

// Альтернативный способ через filter:
// return arr.filter((item, index) => arr.indexOf(item) === index);
}

const mixedArray = [1, 2, 2, 3, 4, 4, 5, 1];
console.log(findUnique(mixedArray)); // [1, 2, 3, 4, 5]

  1. Группировка объектов:
JS
Скопировать код
function groupBy(arr, key) {
// Создаём объект для группировки
const grouped = {};

arr.forEach(item => {
// Получаем значение ключа
const keyValue = item[key];

// Если такого ключа ещё нет в объекте, создаём массив
if (!grouped[keyValue]) {
grouped[keyValue] = [];
}

// Добавляем элемент в соответствующий массив
grouped[keyValue].push(item);
});

return grouped;
}

const people = [
{ name: "Anna", age: 25 },
{ name: "Boris", age: 30 },
{ name: "Clara", age: 25 },
{ name: "David", age: 30 },
{ name: "Emma", age: 22 }
];

console.log(groupBy(people, "age"));
// Результат:
// {
// "22": [{ name: "Emma", age: 22 }],
// "25": [{ name: "Anna", age: 25 }, { name: "Clara", age: 25 }],
// "30": [{ name: "Boris", age: 30 }, { name: "David", age: 30 }]
// }

Уровень 3: Асинхронность и работа с DOM

  1. Задержка выполнения:
JS
Скопировать код
function delay(ms) {
// Возвращаем Promise, который разрешится через ms миллисекунд
return new Promise(resolve => setTimeout(resolve, ms));
}

async function example() {
console.log("Начало");
await delay(2000); // Ждём 2 секунды
console.log("Прошло 2 секунды");
await delay(1000); // Ждём ещё 1 секунду
console.log("Прошло ещё 1 секунду");
}

example();

  1. Динамическое создание списка:
JS
Скопировать код
// HTML: <div id="listContainer"></div>

function createList(items) {
// Получаем контейнер
const container = document.getElementById("listContainer");

// Создаём элемент списка
const ul = document.createElement("ul");

// Добавляем каждый элемент в список
items.forEach(item => {
const li = document.createElement("li");
li.textContent = item;

// При клике меняем стиль элемента
li.addEventListener("click", function() {
this.style.textDecoration = 
this.style.textDecoration === "line-through" ? 
"none" : "line-through";
});

ul.appendChild(li);
});

// Добавляем список в контейнер
container.appendChild(ul);
}

createList(["Изучить HTML", "Освоить CSS", "Выучить JavaScript", "Создать проект"]);

Каждая из этих задач подчёркивает определённый аспект JavaScript — от простых манипуляций с данными до работы с асинхронностью и DOM. Рекомендую не просто копировать эти решения, а пытаться самостоятельно решить задачу, а затем сверяться с предложенным решением. 🧠

При решении задач помните о следующих практических советах:

  • Разбивайте сложные проблемы на более мелкие — проще решить несколько простых задач, чем одну сложную.
  • Используйте console.log() для проверки промежуточных результатов и отладки.
  • Экспериментируйте с кодом — меняйте условия, параметры, и наблюдайте за изменениями в результате.
  • Читайте документацию — MDN Web Docs содержит подробную информацию о каждом методе и свойстве JavaScript.
  • Не бойтесь ошибок — они являются частью процесса обучения и помогают лучше понять, как работает язык.

От теории к практике: JavaScript в действии для новичков

Теория без практики мертва, а практика без теории слепа. Давайте объединим теоретические знания с практическими примерами и создадим несколько полезных мини-проектов, которые вы можете использовать в реальных ситуациях. 🛠️

Мини-проект 1: Калькулятор расходов

Этот проект поможет отслеживать расходы, добавлять новые затраты и видеть общую сумму.

JS
Скопировать код
// HTML:
// <div id="expenseTracker">
// <h2>Калькулятор расходов</h2>
// <div>
// <input type="text" id="expenseName" placeholder="Название">
// <input type="number" id="expenseAmount" placeholder="Сумма">
// <button id="addExpense">Добавить</button>
// </div>
// <ul id="expenseList"></ul>
// <div id="totalExpense">Общая сумма: 0</div>
// </div>

// Получаем ссылки на элементы DOM
const expenseName = document.getElementById("expenseName");
const expenseAmount = document.getElementById("expenseAmount");
const addExpenseButton = document.getElementById("addExpense");
const expenseList = document.getElementById("expenseList");
const totalExpenseDisplay = document.getElementById("totalExpense");

// Инициализируем массив для хранения расходов и общую сумму
let expenses = [];
let totalExpense = 0;

// Функция для добавления нового расхода
function addExpense() {
// Получаем значения из полей ввода
const name = expenseName.value.trim();
const amount = parseFloat(expenseAmount.value);

// Проверяем корректность ввода
if (name === "" || isNaN(amount) || amount <= 0) {
alert("Пожалуйста, введите корректное название и сумму расхода");
return;
}

// Создаём новый объект расхода
const expense = {
id: Date.now(), // Уникальный идентификатор
name: name,
amount: amount
};

// Добавляем расход в массив
expenses.push(expense);

// Обновляем общую сумму
totalExpense += amount;

// Обновляем отображение
updateExpenseList();
updateTotalExpense();

// Очищаем поля ввода
expenseName.value = "";
expenseAmount.value = "";
expenseName.focus();
}

// Функция для удаления расхода
function removeExpense(id) {
// Находим индекс расхода в массиве
const index = expenses.findIndex(expense => expense.id === id);

if (index !== -1) {
// Вычитаем сумму удаляемого расхода из общей суммы
totalExpense -= expenses[index].amount;

// Удаляем расход из массива
expenses.splice(index, 1);

// Обновляем отображение
updateExpenseList();
updateTotalExpense();
}
}

// Функция для обновления списка расходов
function updateExpenseList() {
// Очищаем текущий список
expenseList.innerHTML = "";

// Добавляем каждый расход в список
expenses.forEach(expense => {
const li = document.createElement("li");
li.innerHTML = `
<span>${expense.name}: ${expense.amount.toFixed(2)}</span>
<button class="deleteButton" data-id="${expense.id}">Удалить</button>
`;

expenseList.appendChild(li);
});

// Добавляем обработчики для кнопок удаления
document.querySelectorAll(".deleteButton").forEach(button => {
button.addEventListener("click", function() {
const id = parseInt(this.getAttribute("data-id"));
removeExpense(id);
});
});
}

// Функция для обновления общей суммы расходов
function updateTotalExpense() {
totalExpenseDisplay.textContent = `Общая сумма: ${totalExpense.toFixed(2)}`;
}

// Добавляем обработчик события для кнопки добавления расхода
addExpenseButton.addEventListener("click", addExpense);

// Добавляем обработчик для клавиши Enter в полях ввода
expenseName.addEventListener("keyup", function(event) {
if (event.key === "Enter") {
expenseAmount.focus();
}
});

expenseAmount.addEventListener("keyup", function(event) {
if (event.key === "Enter") {
addExpense();
}
});

Мини-проект 2: Таймер помидора (Pomodoro Timer)

Этот проект реализует технику "Помидора" для управления временем — работа 25 минут, затем 5-минутный перерыв.

JS
Скопировать код
// HTML:
// <div id="pomodoroTimer">
// <h2>Таймер помидора</h2>
// <div id="timerDisplay">25:00</div>
// <div id="controls">
// <button id="startButton">Старт</button>
// <button id="pauseButton">Пауза</button>
// <button id="resetButton">Сброс</button>
// </div>
// <div id="sessionInfo">Работа</div>
// </div>

// Получаем ссылки на элементы DOM
const timerDisplay = document.getElementById("timerDisplay");
const startButton = document.getElementById("startButton");
const pauseButton = document.getElementById("pauseButton");
const resetButton = document.getElementById("resetButton");
const sessionInfo = document.getElementById("sessionInfo");

// Определяем константы для времени (в секундах)
const WORK_TIME = 25 * 60; // 25 минут
const BREAK_TIME = 5 * 60; // 5 минут

// Инициализируем переменные
let timeLeft = WORK_TIME;
let isRunning = false;
let isWorkSession = true;
let timerInterval;

// Функция для форматирования времени в формат MM:SS
function formatTime(seconds) {
const minutes = Math.floor(seconds / 60);
const remainingSeconds = seconds % 60;
return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
}

// Функция для обновления отображения таймера
function updateDisplay() {
timerDisplay.textContent = formatTime(timeLeft);

// Устанавливаем соответствующий класс для изменения цвета
timerDisplay.className = isWorkSession ? "work" : "break";
sessionInfo.textContent = isWorkSession ? "Работа" : "Перерыв";
}

// Функция для запуска таймера
function startTimer() {
if (isRunning) return;

isRunning = true;
startButton.disabled = true;

timerInterval = setInterval(() => {
timeLeft--;

updateDisplay();

// Если время вышло
if (timeLeft <= 0) {
clearInterval(timerInterval);

// Переключаемся между сессиями работы и перерыва
isWorkSession = !isWorkSession;
timeLeft = isWorkSession ? WORK_TIME : BREAK_TIME;

// Воспроизводим звуковое уведомление
const audio = new Audio('https://assets.mixkit.co/sfx/preview/mixkit-alarm-digital-clock-beep-989.mp3');
audio.play();

updateDisplay();
isRunning = false;
startButton.disabled = false;
}
}, 1000);
}

// Функция для приостановки таймера
function pauseTimer() {
if (!isRunning) return;

clearInterval(timerInterval);
isRunning = false;
startButton.disabled = false;
}

// Функция для сброса таймера
function resetTimer() {
pauseTimer();
isWorkSession = true;
timeLeft = WORK_TIME;
updateDisplay();
}

// Добавляем обработчики событий для кнопок
startButton.addEventListener("click", startTimer);
pauseButton.addEventListener("click", pauseTimer);
resetButton.addEventListener("click", resetTimer);

// Инициализируем отображение
updateDisplay();

// Добавляем стили
document.head.insertAdjacentHTML('beforeend', `
<style>
#timerDisplay {
font-size: 3rem;
margin: 20px 0;
transition: color 0.5s;
}

#timerDisplay.work {
color: #e74c3c;
}

#timerDisplay.break {
color: #3498db;
}

button {
margin: 0 5px;
padding: 8px 16px;
}
</style>
`);

Эти мини-проекты можно легко интегрировать в ваш веб-сайт или использовать как отдельные приложения. Они демонстрируют, как JavaScript может быть применен для решения повседневных задач. Но что еще важнее — они показывают, как различные концепции языка (переменные, функции, события, DOM-манипуляции) работают вместе в реальных приложениях. 💡

Для закрепления ваших знаний, попробуйте добавить новые функции к этим мини-проектам:

  • Для калькулятора расходов: добавьте возможность редактирования существующих расходов или группировку по категориям.
  • Для таймера помидора: добавьте счётчик завершенных циклов работы/отдыха или настройку произвольных интервалов времени.

Помните, что практика и эксперименты — ключевые факторы в освоении JavaScript. Начните с малого, постепенно усложняйте задачи, и вскоре вы будете удивлены тем, насколько сложные проекты сможете создавать! 🚀

Начав с простых примеров, вы заложили фундамент своих знаний JavaScript. Теперь ваша задача — строить на этом фундаменте, экспериментировать и не бояться делать ошибки. Каждая строчка кода, которую вы напишете самостоятельно, каждая ошибка, которую вы исправите — это шаг к мастерству. Не останавливайтесь на том, что увидели здесь. Берите эти примеры, изменяйте их, комбинируйте и создавайте что-то новое. Ведь настоящее понимание приходит только через практику и постоянные эксперименты. Возможно, через пару месяцев вы вернётесь к этим примерам и удивитесь, насколько они теперь кажутся простыми. И это будет лучшим показателем вашего прогресса.

Читайте также

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Кто создал JavaScript?
1 / 5

Загрузка...