🐱 Бесплатный демо-урок
Попробуйте прямо сейчас
Пройдите один урок ниже — и сразу поймёте, как устроен марафон. Это бесплатно, без регистрации и обязательств.
16 занятий
5 разделов
30 дней доступ
Начать демо-урок → Анимированный
урок 3–5 мин
Автопроверка
заданий
Похвала
от Матроскина
Демо-урок · Занятие 1 Счёт предметов от 1 до 10
Смотрите видео, выполняйте 3 задания и получайте похвалу от Матроскина.
▶ Демо-урок
Занятие 1. Считаем банки с вареньем
1 Видео от Матроскина
Матроскин пересчитывает банки с вареньем, но сбивается со счёта. Посмотрите и узнаете, как помочь ему.
2 Задание 1. Расставь по порядку
Помоги Матроскину: перетащи банки с цифрами в правильном порядке от 1 до 5.
3 Задание 2. Найди знак
В корзине А — 6 морковок, в корзине Б — 4. Какая корзина тяжелее? Выбери знак.
🥕 А — 6 морковок 🥕 Б — 4 морковки
4 Задание 3. Впиши цифру
Впиши пропущенную цифру: 1, 2, _, 4, 5, _, 7, 8, _, 10. Нажми «Проверить».
1, 2, , 4, 5, , 7, 8, , 10
Первая пропущенная:
🐱🎉
Урок пройден!
Матроскин тобой гордится. В марафоне таких занятий ещё 15 — и каждое такое же увлекательное.
Что внутри марафона Полная программа
5 разделов, 16 занятий, 4 недели мягкого повторения всей программы 1 класса.
🎬 Видеоуроки
Анимированные ролики с Матроскиным — короткие и понятные.
🎮 Интерактивы
3 задания на каждом уроке с автопроверкой и подсказками.
🏆 Похвала
Тёплая обратная связь от Матроскина за каждый шаг.
📋 Чек-листы и д/з
Прогресс по навыкам + нескучные задания для дома.
5 разделов · 16 занятий От счёта — к задачам
От простого к сложному: числа → арифметика → задачи → фигуры → работа с данными.
1
Числа и величины
5 занятий Числа 1–20, ноль, десяток, сравнение и измерение длины.
2
Арифметические действия
5 занятий Сложение и вычитание в пределах 20, с переходом и без.
3
Текстовые задачи
3 занятия Условие, вопрос, выбор действия. Задачи на + и −.
4
Пространство и фигуры
2 занятия Слева/справа, фигуры, отрезки, см и дм.
5
Математическая информация
1 занятие Группировка, закономерности, таблицы, верные утверждения.
' +
'
Матроскин уже считает!
' +
'
«Так, раз банка… два банка… три… ой, я сбился! Сколько же их у меня на полке?»
' +
'
' +
'🥫1🥫2🥫3🥫4🥫5🥫6' +
'
' +
'';
completed[1] = true;
setTimeout(updateUI, 800);
});
}
// ============= STEP 2: DRAG & DROP =============
const pool = document.getElementById('mm-pool');
const slots = document.getElementById('mm-slots');
if (pool && slots) {
// Build slots 1-5
for (let i = 1; i <= 5; i++) {
const s = document.createElement('div');
s.className = 'mm__slot';
s.dataset.value = String(i);
s.textContent = '?';
slots.appendChild(s);
}
// Build shuffled chips 1-5
const numbers = [1, 2, 3, 4, 5].sort(() => Math.random() - 0.5);
numbers.forEach(n => {
const chip = document.createElement('div');
chip.className = 'mm__chip';
chip.draggable = true;
chip.dataset.value = String(n);
chip.textContent = String(n);
pool.appendChild(chip);
});
let draggedChip = null;
let draggedSource = null;
function handleDragStart(e) {
draggedChip = e.target;
draggedSource = e.target.parentElement;
e.target.classList.add('is-dragging');
try { e.dataTransfer.setData('text/plain', e.target.dataset.value); } catch (err) {}
}
function handleDragEnd(e) {
e.target.classList.remove('is-dragging');
document.querySelectorAll('.mm__slot').forEach(s => s.classList.remove('is-target'));
}
pool.addEventListener('dragstart', handleDragStart);
pool.addEventListener('dragend', handleDragEnd);
// re-bind for chips added later
pool.addEventListener('dragstart', function (e) { if (e.target.classList && e.target.classList.contains('mm__chip')) handleDragStart(e); });
function makeDropTarget(el) {
el.addEventListener('dragover', function (e) { e.preventDefault(); el.classList.add('is-target'); });
el.addEventListener('dragleave', function () { el.classList.remove('is-target'); });
el.addEventListener('drop', function (e) {
e.preventDefault();
el.classList.remove('is-target');
if (!draggedChip) return;
// If slot already has a chip, move it back to pool
const existing = el.querySelector('.mm__chip');
if (existing && draggedSource !== el) {
pool.appendChild(existing);
}
el.appendChild(draggedChip);
el.classList.add('is-filled');
el.textContent = '';
el.appendChild(draggedChip);
// Check
checkDrag();
});
}
document.querySelectorAll('.mm__slot').forEach(makeDropTarget);
// Pool also accepts drops to return chips
pool.addEventListener('dragover', function (e) { e.preventDefault(); });
pool.addEventListener('drop', function (e) {
e.preventDefault();
if (!draggedChip) return;
// If from a slot, return to pool
if (draggedSource && draggedSource.classList.contains('mm__slot')) {
pool.appendChild(draggedChip);
draggedSource.classList.remove('is-filled');
const v = draggedSource.dataset.value;
draggedSource.textContent = '?';
}
checkDrag();
});
function checkDrag() {
const filledSlots = document.querySelectorAll('.mm__slot .mm__chip');
if (filledSlots.length < 5) return;
let allCorrect = true;
filledSlots.forEach(chip => {
const slot = chip.parentElement;
if (chip.dataset.value === slot.dataset.value) {
slot.classList.add('is-correct');
slot.classList.remove('is-wrong');
} else {
slot.classList.add('is-wrong');
slot.classList.remove('is-correct');
allCorrect = false;
}
});
if (allCorrect) {
completed[2] = true;
setTimeout(updateUI, 400);
}
}
// Also support click: tap a slot to pick it up, then tap a chip or another slot
slots.addEventListener('click', function (e) {
const slot = e.target.closest('.mm__slot');
if (!slot) return;
const chip = slot.querySelector('.mm__chip');
if (!chip) return;
// Return to pool
pool.appendChild(chip);
slot.classList.remove('is-filled', 'is-correct', 'is-wrong');
slot.textContent = '?';
checkDrag();
});
}
// ============= STEP 3: CHOOSE SIGN =============
const signChoose = document.getElementById('mm-sign-choose');
if (signChoose) {
signChoose.addEventListener('click', function (e) {
const btn = e.target.closest('.mm__choose-btn');
if (!btn || btn.disabled) return;
const chosen = btn.dataset.sign;
const correct = '>';
if (chosen === correct) {
btn.classList.add('is-correct');
completed[3] = true;
setTimeout(updateUI, 400);
// disable siblings
signChoose.querySelectorAll('.mm__choose-btn').forEach(b => b.disabled = true);
} else {
btn.classList.add('is-wrong');
setTimeout(() => btn.classList.remove('is-wrong'), 800);
}
});
}
// ============= STEP 4: INPUT =============
const inputSubmit = document.getElementById('mm-input-submit');
const inputField = document.getElementById('mm-input1');
const inputHint = document.getElementById('mm-input-hint');
if (inputSubmit && inputField) {
const checkInput = function () {
const val = inputField.value.trim();
if (val === '3') {
inputField.classList.add('is-correct');
inputField.classList.remove('is-wrong');
inputHint.textContent = '🎉 Правильно! Молодец.';
inputHint.classList.add('is-correct');
inputHint.classList.remove('is-wrong');
completed[4] = true;
setTimeout(updateUI, 400);
} else {
inputField.classList.add('is-wrong');
inputField.classList.remove('is-correct');
inputHint.textContent = 'Подумай ещё: между 2 и 4 стоит какое число?';
inputHint.classList.add('is-wrong');
inputHint.classList.remove('is-correct');
}
};
inputSubmit.addEventListener('click', checkInput);
inputField.addEventListener('keydown', function (e) {
if (e.key === 'Enter') {
e.preventDefault();
checkInput();
}
});
}
// ============= NAV =============
prevBtn.addEventListener('click', function () { goToStep(currentStep - 1); });
nextBtn.addEventListener('click', function () { goToStep(currentStep + 1); });
updateUI();
})();