Загрузка данных
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>LocalData Dashboard Demo</title>
<style>
/* Базовые стили для наглядности демо */
body { font-family: sans-serif; max-width: 500px; margin: 40px auto; padding: 20px; }
.tabs-menu { display: flex; gap: 10px; margin-bottom: 20px; }
.tab { padding: 10px 20px; cursor: pointer; border: 1px solid #ccc; background: #f0f0f0; border-radius: 4px; }
.tab.active { background: #007bff; color: white; border-color: #007bff; }
.tab-content { display: none; padding: 20px; border: 1px solid #ccc; border-radius: 4px; }
.tab-content.active { display: block; }
.form-group { margin-bottom: 15px; }
label { display: block; margin-bottom: 5px; font-weight: bold; }
input, select { width: 100%; padding: 8px; box-sizing: border-box; }
</style>
</head>
<body>
<div class="tabs-menu">
<div class="tab" data-tab="tab-personal">Личные данные</div>
<div class="tab" data-tab="tab-contacts">Контакты</div>
<div class="tab" data-tab="tab-settings">Настройки</div>
</div>
<div id="tab-personal" class="tab-content">
<h3>Личные данные</h3>
<form>
<div class="form-group">
<label>Имя:</label>
<input type="text" name="username" placeholder="Введите имя">
</div>
<div class="form-group">
<label>Фамилия:</label>
<input type="text" name="lastname" placeholder="Введите фамилию">
</div>
</form>
</div>
<div id="tab-contacts" class="tab-content">
<h3>Контакты</h3>
<form>
<div class="form-group">
<label>Email:</label>
<input type="email" name="email" placeholder="example@mail.com">
</div>
<div class="form-group">
<label>Телефон:</label>
<input type="tel" name="phone" placeholder="+7 (999) 000-00-00">
</div>
</form>
</div>
<div id="tab-settings" class="tab-content">
<h3>Настройки</h3>
<form>
<div class="form-group">
<label>Язык интерфейса:</label>
<select name="lang">
<option value="ru">Русский</option>
<option value="en">English</option>
</select>
</div>
<div class="form-group">
<label>Тема оформления:</label>
<select name="theme">
<option value="light">Светлая</option>
<option value="dark">Тёмная</option>
</select>
</div>
</form>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
const tabs = document.querySelectorAll('.tab');
const contents = document.querySelectorAll('.tab-content');
const forms = document.querySelectorAll('form');
// Шаг 1: Загрузка данных из localStorage при старте
const savedData = JSON.parse(localStorage.getItem('dashboardData')) || {};
const activeTabId = localStorage.getItem('activeTab') || 'tab-personal';
// Заполняем все найденные поля сохраненными значениями
Object.keys(savedData).forEach(name => {
const input = document.querySelector(`[name="${name}"]`);
if (input) input.value = savedData[name];
});
// Функция для переключения классов и сохранения активного таба
function switchTab(tabId) {
tabs.forEach(t => t.classList.toggle('active', t.dataset.tab === tabId));
contents.forEach(c => c.classList.toggle('active', c.id === tabId));
localStorage.setItem('activeTab', tabId);
}
// Активируем вкладку, на которой остановился пользователь
switchTab(activeTabId);
// Шаг 2: Клик по вкладкам (делегирование на меню)
document.querySelector('.tabs-menu').addEventListener('click', (e) => {
const tab = e.target.closest('.tab');
if (tab) switchTab(tab.dataset.tab);
});
// Шаг 3: Мгновенное автосохранение при вводе/изменении данных
forms.forEach(form => {
form.addEventListener('input', (e) => {
if (e.target.name) {
savedData[e.target.name] = e.target.value;
localStorage.setItem('dashboardData', JSON.stringify(savedData));
}
});
});
});
</script>
</body>
</html>