Добавлен раздел питания: рекомендации, трекер воды, калькулятор калорий
This commit is contained in:
parent
64c1d23f2d
commit
14fb2b7e81
206
index.html
206
index.html
@ -410,6 +410,7 @@
|
||||
<button onclick="showSection('catalog')">🎬 Каталог упражнений</button>
|
||||
<button onclick="showSection('calendar')">📆 Календарь</button>
|
||||
<button onclick="showSection('tracker')">📊 Трекер прогресса</button>
|
||||
<button onclick="showSection('nutrition')">🥗 Питание</button>
|
||||
</nav>
|
||||
|
||||
<!-- СЕКЦИЯ: СЕГОДНЯ -->
|
||||
@ -491,6 +492,107 @@
|
||||
<div class="progress-stats" id="progress-stats"></div>
|
||||
<div id="progress-history" style="margin-top: 30px;"></div>
|
||||
</div>
|
||||
|
||||
<!-- СЕКЦИЯ: ПИТАНИЕ -->
|
||||
<div id="nutrition" class="section">
|
||||
<h2>🥗 Питание для похудения</h2>
|
||||
|
||||
<div class="goal-info" style="background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);">
|
||||
<h3 style="margin-top: 0; color: #333;">Твоя цель</h3>
|
||||
<p><strong>Стартовый вес:</strong> 65 кг</p>
|
||||
<p><strong>Цель за 2 месяца:</strong> 58-59 кг (-6-7 кг)</p>
|
||||
<p><strong>Калорий в день:</strong> 1400-1500 ккал</p>
|
||||
<p><strong>Воды в день:</strong> 2-2.5 литра</p>
|
||||
</div>
|
||||
|
||||
<h3>📋 Рекомендации по питанию</h3>
|
||||
<div class="exercise-grid" style="grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));">
|
||||
<div class="exercise-card">
|
||||
<div class="info">
|
||||
<h4>🍳 Завтрак (7:00-9:00)</h4>
|
||||
<p>Омлет из 2 яиц с овощами + кусочек цельнозернового хлеба</p>
|
||||
<p>Или: овсянка на воде с ягодами + 1 яйцо</p>
|
||||
<div class="meta"><span>~350 ккал</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="exercise-card">
|
||||
<div class="info">
|
||||
<h4>🥗 Перекус (11:00)</h4>
|
||||
<p>Яблоко/груша + 10 орешков (миндаль/грецкий)</p>
|
||||
<p>Или: натуральный йогурт без сахара</p>
|
||||
<div class="meta"><span>~150 ккал</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="exercise-card">
|
||||
<div class="info">
|
||||
<h4>🍲 Обед (13:00-14:00)</h4>
|
||||
<p>Куриная грудка/рыба (150г) + гречка/рис (100г) + салат</p>
|
||||
<p>Или: суп на овощном бульоне + кусочек мяса</p>
|
||||
<div class="meta"><span>~450 ккал</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="exercise-card">
|
||||
<div class="info">
|
||||
<h4>🥛 Перекус (16:00)</h4>
|
||||
<p>Творог (100г) + ложка мёда</p>
|
||||
<p>Или: кефир + 1 хлебец</p>
|
||||
<div class="meta"><span>~150 ккал</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="exercise-card">
|
||||
<div class="info">
|
||||
<h4>🐟 Ужин (18:00-19:00)</h4>
|
||||
<p>Рыба/курица (120г) + тушёные овощи</p>
|
||||
<p>Или: салат с тунцом и яйцом</p>
|
||||
<div class="meta"><span>~300 ккал</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="exercise-card">
|
||||
<div class="info">
|
||||
<h4>⚠️ Что исключить</h4>
|
||||
<p>❌ Сахар и сладости</p>
|
||||
<p>❌ Белый хлеб и выпечку</p>
|
||||
<p>❌ Газировку и пакетированные соки</p>
|
||||
<p>❌ Фастфуд и майонез</p>
|
||||
<div class="meta"><span>Экономия ~500 ккал/день</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3 style="margin-top: 30px;">💧 Трекер воды</h3>
|
||||
<div style="background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%); border-radius: 15px; padding: 25px; margin-top: 20px;">
|
||||
<p style="margin-bottom: 15px;">Выпито сегодня: <strong id="water-count">0</strong> из 8 стаканов</p>
|
||||
<div style="display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 15px;" id="water-glasses"></div>
|
||||
<button class="btn" onclick="addWater()">💧 Выпить стакан</button>
|
||||
<button class="btn" onclick="resetWater()" style="background: #999; margin-left: 10px;">Сбросить</button>
|
||||
</div>
|
||||
|
||||
<h3 style="margin-top: 30px;">📊 Калькулятор калорий</h3>
|
||||
<div style="background: #f8f9fc; border-radius: 15px; padding: 25px; margin-top: 20px;">
|
||||
<p>Рассчитай калорийность продуктов, которые ешь:</p>
|
||||
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 15px;">
|
||||
<input type="text" id="product-name" placeholder="Продукт (например: яблоко)" style="padding: 12px; border: 2px solid #e0e0e5; border-radius: 10px;">
|
||||
<input type="number" id="product-grams" placeholder="Вес (грамм)" style="padding: 12px; border: 2px solid #e0e0e5; border-radius: 10px;">
|
||||
</div>
|
||||
<button class="btn" onclick="calculateCalories()" style="margin-top: 15px;">Рассчитать</button>
|
||||
<div id="calories-result" style="margin-top: 15px; font-size: 18px; font-weight: bold; color: #667eea;"></div>
|
||||
</div>
|
||||
|
||||
<div class="progress-stats" style="margin-top: 30px;">
|
||||
<div class="stat-card" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);">
|
||||
<div class="value" id="total-water">0</div>
|
||||
<div class="label">Стаканов всего</div>
|
||||
</div>
|
||||
<div class="stat-card" style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);">
|
||||
<div class="value" id="days-tracked">0</div>
|
||||
<div class="label">Дней отслеживания</div>
|
||||
</div>
|
||||
<div class="stat-card" style="background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);">
|
||||
<div class="value" id="avg-weight">65</div>
|
||||
<div class="label">Средний вес</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Модальное окно для видео -->
|
||||
@ -728,7 +830,7 @@
|
||||
|
||||
// === СОСТОЯНИЕ ===
|
||||
let currentWeek = 0;
|
||||
let progressData = JSON.parse(localStorage.getItem('madinaProgress') || '{"entries":[],"completedDays":[]}');
|
||||
let progressData = JSON.parse(localStorage.getItem('madinaProgress') || '{"entries":[],"completedDays":[],"water":[],"waterToday":0}');
|
||||
|
||||
// === ИНИЦИАЛИЗАЦИЯ ===
|
||||
function init() {
|
||||
@ -914,6 +1016,96 @@
|
||||
(e.arms ? 'руки ' + e.arms + ' см' : '') +
|
||||
'</div>'
|
||||
).join('') : '<p>Пока нет записей. Заполни данные выше!</p>';
|
||||
|
||||
renderNutrition();
|
||||
}
|
||||
|
||||
// === ПИТАНИЕ ===
|
||||
const productsCalories = {
|
||||
'яблоко': 52, 'груша': 57, 'банан': 89, 'апельсин': 47, 'виноград': 67,
|
||||
'курица': 165, 'куриная грудка': 110, 'рыба': 206, 'тунец': 132, 'лосось': 208,
|
||||
'яйцо': 155, 'овсянка': 389, 'гречка': 343, 'рис': 130, 'картофель': 77,
|
||||
'творог': 98, 'йогурт': 59, 'кефир': 41, 'молоко': 42, 'сыр': 402,
|
||||
'хлеб': 265, 'хлебец': 310, 'орехи': 607, 'миндаль': 579, 'мёд': 304,
|
||||
'помидор': 18, 'огурец': 16, 'капуста': 25, 'морковь': 41, 'брокколи': 34
|
||||
};
|
||||
|
||||
function renderNutrition() {
|
||||
// Вода
|
||||
const todayStr = new Date().toDateString();
|
||||
const waterToday = progressData.waterToday || 0;
|
||||
const totalWater = progressData.water ? progressData.water.length : 0;
|
||||
|
||||
document.getElementById('water-count').textContent = waterToday;
|
||||
document.getElementById('total-water').textContent = totalWater;
|
||||
|
||||
const glassesContainer = document.getElementById('water-glasses');
|
||||
glassesContainer.innerHTML = '';
|
||||
for (let i = 0; i < 8; i++) {
|
||||
const glass = document.createElement('span');
|
||||
glass.textContent = i < waterToday ? '💧' : '🥛';
|
||||
glass.style.fontSize = '24px';
|
||||
glassesContainer.appendChild(glass);
|
||||
}
|
||||
|
||||
// Дни отслеживания
|
||||
const uniqueDates = [...new Set(progressData.entries.map(e => new Date(e.date).toDateString()))];
|
||||
document.getElementById('days-tracked').textContent = uniqueDates.length;
|
||||
|
||||
// Средний вес
|
||||
if (progressData.entries.length > 0) {
|
||||
const avg = progressData.entries.reduce((sum, e) => sum + (parseFloat(e.weight) || 0), 0) / progressData.entries.length;
|
||||
document.getElementById('avg-weight').textContent = avg.toFixed(1);
|
||||
}
|
||||
}
|
||||
|
||||
function addWater() {
|
||||
if (progressData.waterToday >= 8) {
|
||||
alert('💧 8 стаканов уже выпито! Отличный результат!');
|
||||
return;
|
||||
}
|
||||
progressData.waterToday++;
|
||||
if (!progressData.water) progressData.water = [];
|
||||
progressData.water.push(new Date().toISOString());
|
||||
localStorage.setItem('madinaProgress', JSON.stringify(progressData));
|
||||
renderNutrition();
|
||||
}
|
||||
|
||||
function resetWater() {
|
||||
progressData.waterToday = 0;
|
||||
localStorage.setItem('madinaProgress', JSON.stringify(progressData));
|
||||
renderNutrition();
|
||||
}
|
||||
|
||||
function calculateCalories() {
|
||||
const name = document.getElementById('product-name').value.toLowerCase().trim();
|
||||
const grams = parseInt(document.getElementById('product-grams').value);
|
||||
|
||||
if (!name || !grams) {
|
||||
document.getElementById('calories-result').textContent = '⚠️ Введи продукт и вес';
|
||||
return;
|
||||
}
|
||||
|
||||
// Поиск продукта в базе
|
||||
let caloriesPer100 = 0;
|
||||
let found = false;
|
||||
|
||||
for (const key in productsCalories) {
|
||||
if (name.includes(key)) {
|
||||
caloriesPer100 = productsCalories[key];
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
document.getElementById('calories-result').textContent = '❓ Продукт не найден в базе. Пример: яблоко 100г = ~52 ккал';
|
||||
return;
|
||||
}
|
||||
|
||||
const result = Math.round((caloriesPer100 * grams) / 100);
|
||||
document.getElementById('calories-result').textContent =
|
||||
'🍎 ' + name + ' (' + grams + 'г) = ' + result + ' ккал';
|
||||
}
|
||||
|
||||
// === МОДАЛЬНОЕ ОКНО ===
|
||||
@ -940,6 +1132,18 @@
|
||||
setTimeout(() => initPlayer(), 1000);
|
||||
|
||||
init();
|
||||
|
||||
// Сброс воды каждый день
|
||||
setInterval(() => {
|
||||
const lastWaterDate = localStorage.getItem('lastWaterDate');
|
||||
const todayStr = new Date().toDateString();
|
||||
if (lastWaterDate !== todayStr) {
|
||||
progressData.waterToday = 0;
|
||||
localStorage.setItem('lastWaterDate', todayStr);
|
||||
localStorage.setItem('madinaProgress', JSON.stringify(progressData));
|
||||
renderNutrition();
|
||||
}
|
||||
}, 60000); // Проверка каждую минуту
|
||||
</script>
|
||||
|
||||
<!-- Скрытый iframe для музыкального плеера -->
|
||||
|
||||
Loading…
Reference in New Issue
Block a user