Калькулятор тонировки схрон
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Калькулятор стоимости тонировки автомобиля</title>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
body {
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
color: #2c3e50;
line-height: 1.6;
padding: 20px;
min-height: 100vh;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: white;
border-radius: 15px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
overflow: hidden;
}
header {
background: linear-gradient(135deg, #2c3e50 0%, #4a6491 100%);
color: white;
padding: 25px;
text-align: center;
}
h1 {
margin-bottom: 10px;
font-size: 32px;
}
.description {
font-size: 18px;
opacity: 0.9;
max-width: 800px;
margin: 0 auto;
}
.calculator-container {
display: flex;
flex-wrap: wrap;
padding: 25px;
}
.car-selection {
flex: 1;
min-width: 350px;
padding: 25px;
background: #f8f9fa;
border-radius: 10px;
margin-right: 25px;
}
.car-visualization {
flex: 1;
min-width: 350px;
padding: 25px;
text-align: center;
}
.form-group {
margin-bottom: 25px;
padding: 15px;
background: white;
border-radius: 8px;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08);
}
.form-group h3 {
margin-bottom: 15px;
color: #2c3e50;
border-bottom: 2px solid #3498db;
padding-bottom: 8px;
}
label {
display: block;
margin-bottom: 10px;
font-weight: bold;
color: #2c3e50;
}
select, input {
width: 100%;
padding: 14px;
border: 1px solid #ddd;
border-radius: 6px;
font-size: 16px;
margin-bottom: 10px;
transition: border-color 0.3s;
}
select:focus, input:focus {
border-color: #3498db;
outline: none;
box-shadow: 0 0 0 2px rgba(52, 152, 219, 0.2);
}
.glass-options {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 12px;
margin-top: 15px;
}
.glass-option {
display: flex;
align-items: center;
padding: 12px;
background: white;
border: 1px solid #e0e0e0;
border-radius: 6px;
cursor: pointer;
transition: all 0.3s ease;
}
.glass-option:hover {
background: #e8f4fc;
border-color: #3498db;
transform: translateY(-2px);
}
.glass-option input {
margin-right: 12px;
width: auto;
}
.car-image {
max-width: 100%;
height: auto;
margin-bottom: 25px;
border-radius: 10px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12);
transition: transform 0.3s ease;
}
.car-image:hover {
transform: scale(1.02);
}
.summary {
background: linear-gradient(135deg, #2c3e50 0%, #4a6491 100%);
color: white;
padding: 25px;
border-radius: 10px;
margin-top: 25px;
}
.summary h3 {
margin-bottom: 20px;
text-align: center;
font-size: 22px;
}
.summary-item {
display: flex;
justify-content: space-between;
margin-bottom: 12px;
padding-bottom: 12px;
border-bottom: 1px solid rgba(255, 255, 255, 0.15);
}
.total {
font-size: 26px;
font-weight: bold;
margin-top: 20px;
padding-top: 20px;
border-top: 2px solid rgba(255, 255, 255, 0.3);
}
.contact-form {
margin-top: 25px;
padding: 25px;
background: #f8f9fa;
border-radius: 10px;
}
.contact-form h3 {
margin-bottom: 20px;
color: #2c3e50;
text-align: center;
}
button {
width: 100%;
padding: 16px;
background: linear-gradient(135deg, #3498db 0%, #2c3e50 100%);
color: white;
border: none;
border-radius: 6px;
font-size: 18px;
cursor: pointer;
transition: all 0.3s ease;
margin-top: 20px;
}
button:hover {
background: linear-gradient(135deg, #2980b9 0%, #1e2a38 100%);
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.counter {
display: flex;
align-items: center;
margin-top: 10px;
}
.counter button {
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
margin: 0 10px;
}
.counter span {
font-size: 18px;
font-weight: bold;
min-width: 30px;
text-align: center;
}
.van-options {
background: #e8f4fc;
padding: 15px;
border-radius: 8px;
margin-top: 15px;
border-left: 4px solid #3498db;
}
@Media (max-width: 900px) {
.calculator-container {
flex-direction: column;
}
.car-selection {
margin-right: 0;
margin-bottom: 25px;
}
.glass-options {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>Калькулятор стоимости тонировки автомобиля</h1>
<p class="description">Рассчитайте точную стоимость тонировки с учетом всех особенностей вашего автомобиля: форточек, люков и множества боковых стекол</p>
</header>
<div class="calculator-container">
<div class="car-selection">
<div class="form-group">
<h3>Тип автомобиля</h3>
<label for="car-type">Тип кузова:</label>
<select id="car-type">
<option value="">Выберите тип кузова</option>
<option value="sedan">Седан (4-дверный)</option>
<option value="hatchback3">Хэтчбек (3-дверный)</option>
<option value="hatchback5">Хэтчбек (5-дверный)</option>
<option value="universal">Универсал</option>
<option value="crossover">Кроссовер</option>
<option value="suv">Внедорожник</option>
<option value="minivan">Минивэн</option>
<option value="coupe">Купе</option>
<option value="van">Фургон</option>
</select>
</div>
<div class="form-group">
<h3>Стекла для тонировки</h3>
<label>Выберите стекла для тонировки:</label>
<div class="glass-options" id="glass-options">
<p style="grid-column: 1 / -1; text-align: center; padding: 20px;">Сначала выберите тип кузова</p>
</div>
</div>
<div class="form-group">
<h3>Пленка для тонировки</h3>
<label for="film-type">Тип пленки:</label>
<select id="film-type">
<option value="">Выберите тип пленки</option>
<option value="1.3">Llumar ATR (50%) - 1.3x</option>
<option value="1.3">Llumar ATR (35%) - 1.3x</option>
<option value="1.3">Llumar ATR (20%) - 1.3x</option>
<option value="1.0">3M Classic (35%) - 1.0x</option>
<option value="2.0">3M Crystalline (70%) - 2.0x</option>
<option value="1.5">SunTek Carbon (40%) - 1.5x</option>
<option value="1.8">Johnson IR (30%) - 1.8x</option>
</select>
</div>
<div class="form-group">
<h3>Дополнительные услуги</h3>
<div class="glass-options">
<label class="glass-option">
<input type="checkbox" id="remove-old" value="1500">
<span>Снятие старой пленки (+1 500 руб.)</span>
</label>
<label class="glass-option">
<input type="checkbox" id="master-call" value="3000">
<span>Вызов мастера (+3 000 руб.)</span>
</label>
<label class="glass-option">
<input type="checkbox" id="antirain" value="2000">
<span>Нанесение "Антидождь" (+2 000 руб.)</span>
</label>
<label class="glass-option">
<input type="checkbox" id="headlights" value="2500">
<span>Оклейка фар (+2 500 руб.)</span>
</label>
</div>
</div>
</div>
<div class="car-visualization">
<img src="https://via.placeholder.com/500x250/e0e0e0/666666?text=%D0%9..." alt="Изображение автомобиля" id="car-image" class="car-image">
<div class="summary">
<h3>Стоимость тонировки</h3>
<div class="summary-item">
<span>Стоимость стекол:</span>
<span id="glass-price">0 руб.</span>
</div>
<div class="summary-item">
<span>Коэффициент пленки:</span>
<span id="film-coeff">1.0x</span>
</div>
<div class="summary-item">
<span>Дополнительные услуги:</span>
<span id="services-price">0 руб.</span>
</div>
<div class="total">
<span>ИТОГО:</span>
<span id="total-price">0 руб.</span>
</div>
</div>
<div class="contact-form">
<h3>Оставьте заявку</h3>
<div class="form-group">
<input type="text" placeholder="Ваше имя" id="client-name">
</div>
<div class="form-group">
<input type="tel" placeholder="Ваш телефон" id="client-phone">
</div>
<div class="form-group">
<input type="email" placeholder="Ваш email (необязательно)" id="client-email">
</div>
<button id="calculate-btn">Рассчитать стоимость</button>
</div>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Данные по типам кузовов и стеклам
const carData = {
sedan: {
name: "Седан",
image: "https://via.placeholder.com/500x250/3498db/ffffff?text=%D0%A1%D0%B5%D0%B4%D0%B0%D0%BD",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 3000, default: true },
{ id: "front-side", name: "Передние боковые", price: 2000, default: true },
{ id: "rear-side", name: "Задние боковые", price: 2500, default: true },
{ id: "rear", name: "Заднее стекло", price: 2800, default: true },
{ id: "front-vent", name: "Передние форточки", price: 800, default: false },
{ id: "sunroof", name: "Люк", price: 1500, default: false }
]
},
hatchback3: {
name: "Хэтчбек 3дв",
image: "https://via.placeholder.com/500x250/2ecc71/ffffff?text=%D0%A...",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 3000, default: true },
{ id: "front-side", name: "Передние боковые", price: 2000, default: true },
{ id: "rear-side", name: "Задние боковые", price: 2500, default: true },
{ id: "rear", name: "Заднее стекло", price: 2800, default: true },
{ id: "front-vent", name: "Передние форточки", price: 800, default: false },
{ id: "sunroof", name: "Люк", price: 1500, default: false }
]
},
hatchback5: {
name: "Хэтчбек 5дв",
image: "https://via.placeholder.com/500x250/e74c3c/ffffff?text=%D0%A...",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 3000, default: true },
{ id: "front-side", name: "Передние боковые", price: 2000, default: true },
{ id: "rear-side", name: "Задние боковые", price: 2500, default: true },
{ id: "rear", name: "Заднее стекло", price: 2800, default: true },
{ id: "front-vent", name: "Передние форточки", price: 800, default: false },
{ id: "rear-vent", name: "Задние форточки", price: 800, default: false },
{ id: "sunroof", name: "Люк", price: 1500, default: false }
]
},
universal: {
name: "Универсал",
image: "https://via.placeholder.com/500x250/9b59b6/ffffff?text=%D0%A...",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 3200, default: true },
{ id: "front-side", name: "Передние боковые", price: 2200, default: true },
{ id: "rear-side", name: "Задние боковые", price: 2700, default: true },
{ id: "rear", name: "Заднее стекло", price: 3000, default: true },
{ id: "front-vent", name: "Передние форточки", price: 900, default: false },
{ id: "rear-vent", name: "Задние форточки", price: 900, default: false },
{ id: "sunroof", name: "Люк", price: 1700, default: false }
]
},
crossover: {
name: "Кроссовер",
image: "https://via.placeholder.com/500x250/f39c12/ffffff?text=%D0%9...",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 3500, default: true },
{ id: "front-side", name: "Передние боковые", price: 2500, default: true },
{ id: "rear-side", name: "Задние боковые", price: 2800, default: true },
{ id: "rear", name: "Заднее стекло", price: 3200, default: true },
{ id: "front-vent", name: "Передние форточки", price: 1000, default: false },
{ id: "rear-vent", name: "Задние форточки", price: 1000, default: false },
{ id: "sunroof", name: "Люк", price: 1800, default: false }
]
},
suv: {
name: "Внедорожник",
image: "https://via.placeholder.com/500x250/34495e/ffffff?text=%D0%9...",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 4000, default: true },
{ id: "front-side", name: "Передние боковые", price: 2800, default: true },
{ id: "rear-side", name: "Задние боковые", price: 3000, default: true },
{ id: "rear", name: "Заднее стекло", price: 3500, default: true },
{ id: "front-vent", name: "Передние форточки", price: 1200, default: false },
{ id: "rear-vent", name: "Задние форточки", price: 1200, default: false },
{ id: "sunroof", name: "Люк", price: 2000, default: false }
]
},
minivan: {
name: "Минивэн",
image: "https://via.placeholder.com/500x250/16a085/ffffff?text=%D0%9...",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 3800, default: true },
{ id: "front-side", name: "Передние боковые", price: 2600, default: true },
{ id: "rear-side", name: "Задние боковые", price: 2900, default: true },
{ id: "rear", name: "Заднее стекло", price: 3300, default: true },
{ id: "front-vent", name: "Передние форточки", price: 1100, default: false },
{ id: "rear-vent", name: "Задние форточки", price: 1100, default: false },
{ id: "sunroof", name: "Люк", price: 1900, default: false }
]
},
coupe: {
name: "Купе",
image: "https://via.placeholder.com/500x250/e67e22/ffffff?text=%D0%9A%D1%83%D0%BF%D0%B5",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 3200, default: true },
{ id: "front-side", name: "Передние боковые", price: 2200, default: true },
{ id: "rear-side", name: "Задние боковые", price: 2600, default: true },
{ id: "rear", name: "Заднее стекло", price: 3000, default: true },
{ id: "sunroof", name: "Люк", price: 1700, default: false }
]
},
van: {
name: "Фургон",
image: "https://via.placeholder.com/500x250/7f8c8d/ffffff?text=%D0%A...",
glasses: [
{ id: "windscreen", name: "Лобовое стекло", price: 4500, default: true },
{ id: "front-side", name: "Передние боковые", price: 3000, default: true },
{ id: "front-vent", name: "Передние форточки", price: 1500, default: false },
{ id: "rear", name: "Заднее стекло", price: 4000, default: true },
{ id: "side-windows", name: "Боковые стекла (каждое)", price: 1800, default: 0, count: true },
{ id: "rear-vent", name: "Задние форточки", price: 1500, default: false }
]
}
};
// Элементы DOM
const carTypeSelect = document.getElementById('car-type');
const glassOptionsDiv = document.getElementById('glass-options');
const carImage = document.getElementById('car-image');
const filmTypeSelect = document.getElementById('film-type');
const glassPriceSpan = document.getElementById('glass-price');
const filmCoeffSpan = document.getElementById('film-coeff');
const servicesPriceSpan = document.getElementById('services-price');
const totalPriceSpan = document.getElementById('total-price');
const calculateBtn = document.getElementById('calculate-btn');
// Обработчик изменения типа кузова
carTypeSelect.addEventListener('change', function() {
const selectedCar = carData[this.value];
if (selectedCar) {
// Обновляем изображение автомобиля
carImage.src = selectedCar.image;
carImage.alt = selectedCar.name;
// Генерируем options для стекол
let glassHTML = '';
selectedCar.glasses.forEach(glass => {
if (glass.count) {
// Для фургона - счетчик боковых стекол
glassHTML += `
<div class="van-options">
<label>${glass.name}:</label>
<div class="counter">
<button type="button" class="decrease" data-id="${glass.id}">-</button>
<span id="count-${glass.id}">0</span>
<button type="button" class="increase" data-id="${glass.id}">+</button>
</div>
<div>Цена за единицу: ${glass.price} руб.</div>
</div>
`;
} else {
// Обычный чекбокс
glassHTML += `
<label class="glass-option">
<input type="checkbox" id="${glass.id}" value="${glass.price}" ${glass.default ? 'checked' : ''}>
<span>${glass.name} (${glass.price} руб.)</span>
</label>
`;
}
});
glassOptionsDiv.innerHTML = glassHTML;
// Добавляем обработчики для кнопок счетчика
document.querySelectorAll('.increase').forEach(btn => {
btn.addEventListener('click', function() {
const id = this.getAttribute('data-id');
const countElement = document.getElementById(`count-${id}`);
let count = parseInt(countElement.textContent);
countElement.textContent = count + 1;
calculatePrice();
});
});
document.querySelectorAll('.decrease').forEach(btn => {
btn.addEventListener('click', function() {
const id = this.getAttribute('data-id');
const countElement = document.getElementById(`count-${id}`);
let count = parseInt(countElement.textContent);
if (count > 0) {
countElement.textContent = count - 1;
calculatePrice();
}
});
});
// Пересчитываем стоимость
calculatePrice();
} else {
glassOptionsDiv.innerHTML = '<p style="grid-column: 1 / -1; text-align: center; padding: 20px;">Сначала выберите тип кузова</p>';
carImage.src = 'https://via.placeholder.com/500x250/e0e0e0/666666?text=%D0%9...';
}
});
// Обработчики изменений для пересчета стоимости
filmTypeSelect.addEventListener('change', calculatePrice);
// Динамическое добавление обработчиков для чекбоксов
document.addEventListener('change', function(e) {
if (e.target.type === 'checkbox') {
calculatePrice();
}
});
// Функция расчета стоимости
function calculatePrice() {
let glassTotal = 0;
let servicesTotal = 0;
// Суммируем стоимость выбранных стекол
document.querySelectorAll('#glass-options input[type="checkbox"]:checked').forEach(checkbox => {
glassTotal += parseInt(checkbox.value);
});
// Суммируем стоимость боковых стекол фургона
document.querySelectorAll('[id^="count-"]').forEach(element => {
const count = parseInt(element.textContent);
const id = element.id.replace('count-', '');
const glass = carData[carTypeSelect.value]?.glasses.find(g => g.id === id);
if (glass) {
glassTotal += count * glass.price;
}
});
// Суммируем стоимость дополнительных услуг
document.querySelectorAll('.glass-options:not(#glass-options) input[type="checkbox"]:checked').forEach(checkbox => {
servicesTotal += parseInt(checkbox.value);
});
// Получаем коэффициент пленки
const filmCoeff = filmTypeSelect.value ? parseFloat(filmTypeSelect.value) : 1.0;
// Рассчитываем итоговую стоимость
const total = glassTotal * filmCoeff + servicesTotal;
// Обновляем отображение
glassPriceSpan.textContent = `${glassTotal.toLocaleString('ru-RU')} руб.`;
filmCoeffSpan.textContent = `${filmCoeff}x`;
servicesPriceSpan.textContent = `${servicesTotal.toLocaleString('ru-RU')} руб.`;
totalPriceSpan.textContent = `${total.toLocaleString('ru-RU')} руб.`;
}
// Обработчик кнопки расчета
calculateBtn.addEventListener('click', function() {
const name = document.getElementById('client-name').value;
const phone = document.getElementById('client-phone').value;
if (!name || !phone) {
alert('Пожалуйста, заполните ваше имя и телефон!');
return;
}
if (carTypeSelect.value === "") {
alert('Пожалуйста, выберите тип кузова!');
return;
}
calculatePrice();
// Собираем информацию о выбранных опциях
const selectedOptions = [];
document.querySelectorAll('#glass-options input[type="checkbox"]:checked').forEach(checkbox => {
selectedOptions.push(checkbox.parentElement.querySelector('span').textContent.split(' (')[0]);
});
document.querySelectorAll('[id^="count-"]').forEach(element => {
const count = parseInt(element.textContent);
if (count > 0) {
const id = element.id.replace('count-', '');
const glass = carData[carTypeSelect.value]?.glasses.find(g => g.id === id);
if (glass) {
selectedOptions.push(`${count} × ${glass.name}`);
}
}
});
alert(`Спасибо, ${name}! Ваша заявка принята.\n\nТип автомобиля: ${carData[carTypeSelect.value].name}\nВыбранные опции: ${selectedOptions.join(', ')}\nИтоговая стоимость: ${totalPriceSpan.textContent}\n\nМы свяжемся с вами по телефону ${phone} в течение 15 минут для уточнения деталей.`);
});
// Инициализация
calculatePrice();
});
</script>
</body>
</html>