Начни изучать JavaScript прямо сейчас: 10 простых примеров кода для новичков
Для кого эта статья:
- Новички в программировании, желающие освоить JavaScript
- Люди, заинтересованные в веб-разработке и создании интерактивных веб-приложений
Студенты или ученики, ищущие практические примеры и задачи для обучения языку программирования
JavaScript открывает двери в мир интерактивного веб-программирования даже для тех, кто никогда не писал ни строчки кода. Но первые шаги часто самые сложные — пугает непонятный синтаксис, странные термины и бесконечный поток информации. 🚀 Именно поэтому я собрал 10 простых, но эффективных программ, которые можно не только скопировать и запустить, но и разобрать по косточкам, чтобы увидеть, как JavaScript работает изнутри. Эти примеры — ваш пропуск в мир разработки без лишней головной боли.
Если вы действительно хотите не просто скопировать код, а понять структуру JavaScript и освоить профессию с нуля, обратите внимание на курс Обучение веб-разработке от Skypro. Там вы не просто изучите базовые конструкции, а построите полноценные проекты под руководством опытных менторов. Мои ученики, прошедшие подобный путь, уже через 8-10 месяцев находили первые позиции джуниор-разработчиков. Не ограничивайте себя копипастой примеров!
Первые шаги в JavaScript: 10 полезных программ для старта
Начнем с самых простых примеров, которые помогут вам почувствовать JavaScript и понять его базовую структуру. Эти программы можно запустить прямо в консоли браузера (F12 → Console) или в любой онлайн-среде разработки.
- Привет, мир! — классическое начало изучения любого языка программирования:
// Выводит сообщение в консоль
console.log("Привет, мир!");
// Показывает всплывающее окно
alert("Привет, JavaScript!");
- Простой калькулятор — сложение двух чисел:
// Запрашиваем у пользователя два числа
let num1 = prompt("Введите первое число:");
let num2 = prompt("Введите второе число:");
// Преобразуем строковые значения в числа
num1 = Number(num1);
num2 = Number(num2);
// Вычисляем и выводим результат
let sum = num1 + num2;
alert("Сумма: " + sum);
- Проверка на чётность — определяет, является ли число чётным:
let number = prompt("Введите число для проверки на чётность:");
number = parseInt(number);
if (number % 2 === 0) {
alert(number + " — чётное число");
} else {
alert(number + " — нечётное число");
}
- Генератор случайных чисел — создаёт случайное число в заданном диапазоне:
// Получаем минимальное и максимальное значения
let min = parseInt(prompt("Введите минимальное значение:"));
let max = parseInt(prompt("Введите максимальное значение:"));
// Генерируем и выводим случайное число
let randomNumber = Math.floor(Math.random() * (max – min + 1)) + min;
alert("Случайное число между " + min + " и " + max + ": " + randomNumber);
- Конвертер температуры — переводит градусы Цельсия в Фаренгейты и обратно:
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 до 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);
- Проверка палиндрома — определяет, является ли строка палиндромом:
let text = prompt("Введите текст для проверки на палиндром:");
// Приводим к нижнему регистру и убираем пробелы
text = text.toLowerCase().replace(/\s/g, '');
// Переворачиваем строку и сравниваем с оригиналом
let reversed = text.split('').reverse().join('');
if (text === reversed) {
alert("Это палиндром!");
} else {
alert("Это не палиндром.");
}
- Таймер обратного отсчёта — отсчитывает время до указанного события:
let seconds = parseInt(prompt("Введите количество секунд для обратного отсчёта:"));
let countdown = setInterval(function() {
if (seconds <= 0) {
clearInterval(countdown);
alert("Время вышло!");
} else {
console.log("Осталось секунд: " + seconds);
seconds--;
}
}, 1000);
- Калькулятор дней между датами — вычисляет количество дней между двумя датами:
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 + " дней.");
- Конвертер валют — переводит сумму из одной валюты в другую:
// Курсы валют (упрощённо)
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"]; |
Рассмотрим эти элементы на примере реальных программ:
- Работа с массивами и циклами — поиск наибольшего числа в массиве:
// Создаём массив чисел
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);
- Функции и параметры — создание универсальной функции для вычисления площади:
// Определяем функцию для вычисления площади прямоугольника
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));
- Работа со строками — подсчёт гласных в строке:
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 + " гласных букв.");
- Объекты и их методы — создание простого объекта "книга":
// Создаём объект, описывающий книгу
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() + " лет.");
- Вложенные циклы — построение таблицы умножения:
// Создаём строку для хранения таблицы умножения
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-страницу:
- Изменение цвета элемента при клике:
// 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;
});
- Простой слайдер изображений:
// 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);
});
- Форма с валидацией:
// 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. Мой наставник дал мне задание — разработать простое приложение для ведения списка дел. Я начала с малого: сделала поле ввода и кнопку для добавления задачи.
Помню момент, когда после нескольких часов борьбы, мой код наконец заработал — появилась возможность добавлять задачи в список, отмечать их выполненными и удалять. Это было настолько захватывающе! Тогда я поняла — не нужно пытаться понять всё сразу. Начинайте с самых базовых интерактивных элементов, и постепенно ваше понимание будет расти. Сейчас я веду свои мастер-классы, где первое, что я показываю новичкам — как написать интерактивный счётчик кликов. Их реакция всегда одинаковая: "Неужели это так просто?"
- Счётчик кликов:
// 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);
}
});
- Часы реального времени:
// 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: Основы
- Подсчёт чётных чисел в массиве:
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));
- Реверс строки:
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
- Подсчёт суммы цифр числа:
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: Работа с массивами и объектами
- Фильтрация массива:
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"]
- Поиск уникальных элементов:
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]
- Группировка объектов:
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
- Задержка выполнения:
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();
- Динамическое создание списка:
// 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: Калькулятор расходов
Этот проект поможет отслеживать расходы, добавлять новые затраты и видеть общую сумму.
// 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-минутный перерыв.
// 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. Теперь ваша задача — строить на этом фундаменте, экспериментировать и не бояться делать ошибки. Каждая строчка кода, которую вы напишете самостоятельно, каждая ошибка, которую вы исправите — это шаг к мастерству. Не останавливайтесь на том, что увидели здесь. Берите эти примеры, изменяйте их, комбинируйте и создавайте что-то новое. Ведь настоящее понимание приходит только через практику и постоянные эксперименты. Возможно, через пару месяцев вы вернётесь к этим примерам и удивитесь, насколько они теперь кажутся простыми. И это будет лучшим показателем вашего прогресса.
Читайте также
- Базовый синтаксис Python: 7 конструкций для начинающих программистов
- Ruby: как создать первую программу от Hello World до калькулятора
- JavaScript для начинающих: простые шаги к интерактивным сайтам
- Самые простые языки программирования для новичков: топ-7 выбор
- Синтаксис Scratch: основы программирования блоками для новичков
- 10 простых проектов в Scratch: от первого кода к играм и анимации
- Python для начинающих: 5 простых примеров программ – стартуем
- Python: идеальный язык для начинающих программистов – 5 причин
- Ruby: элегантный язык программирования для начинающих кодеров