007m's picture
добавь возможность написать размеры (цифры) в строку высота и ширина и добавь к заголовку высота букву а и ширина б например вот так (А Высота(мм) и Б ширина(мм)
2a90a62 verified
Raw
History Blame Contribute Delete
38.7 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BreezyDucts - Вентиляционные системы</title>
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://unpkg.com/feather-icons"></script>
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.waves.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js"></script>
<style>
.duct-animation {
transition: all 0.3s ease;
}
.duct-item:hover {
transform: scale(1.05);
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1);
}
.custom-scroll {
scrollbar-width: thin;
scrollbar-color: #3b82f6 #e5e7eb;
}
.custom-scroll::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.custom-scroll::-webkit-scrollbar-track {
background: #e5e7eb;
}
.custom-scroll::-webkit-scrollbar-thumb {
background-color: #3b82f6;
border-radius: 6px;
}
.airflow-path {
stroke-dasharray: 1000;
stroke-dashoffset: 1000;
animation: dash 5s linear forwards infinite;
}
@keyframes dash {
to {
stroke-dashoffset: 0;
}
}
</style>
</head>
<body class="bg-gray-50">
<div id="vanta-background" class="fixed inset-0 z-0"></div>
<div class="relative z-10 min-h-screen flex flex-col">
<!-- Header -->
<header class="bg-white bg-opacity-90 backdrop-blur-md shadow-sm sticky top-0 z-50">
<div class="container mx-auto px-4 py-4 flex justify-between items-center">
<div class="flex items-center space-x-2">
<svg xmlns="http://www.w3.org/2000/svg" class="h-10 w-10 text-blue-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" />
</svg>
<h1 class="text-2xl font-bold text-gray-800">BreezyDucts</h1>
</div>
<nav class="hidden md:flex space-x-8">
<a href="#" class="text-blue-600 font-medium">Продукция</a>
<a href="#" class="text-gray-600 hover:text-blue-600 transition">Проекты</a>
<a href="mobile-app.html" class="text-gray-600 hover:text-blue-600 transition">Мобильное приложение</a>
<a href="#" class="text-gray-600 hover:text-blue-600 transition">Поддержка</a>
</nav>
<div class="flex items-center space-x-4">
<button class="p-2 rounded-full bg-gray-100 hover:bg-gray-200 transition">
<i data-feather="shopping-cart"></i>
</button>
<button class="p-2 rounded-full bg-gray-100 hover:bg-gray-200 transition">
<i data-feather="user"></i>
</button>
<button class="md:hidden p-2 rounded-full bg-gray-100 hover:bg-gray-200 transition">
<i data-feather="menu"></i>
</button>
</div>
</div>
</header>
<!-- Hero Section -->
<section class="py-16 px-4 relative overflow-hidden">
<div class="container mx-auto flex flex-col md:flex-row items-center">
<div class="md:w-1/2 mb-10 md:mb-0">
<h2 class="text-4xl md:text-5xl font-bold text-gray-800 mb-6 leading-tight">
Точный воздуховод<br>
<span class="text-blue-600">Для профессионалов</span>
</h2>
<p class="text-lg text-gray-600 mb-8 max-w-lg">
Индивидуальные вентиляционные решения с расчетом размеров в реальном времени для профессионалов ОВК.
</p>
<div class="flex flex-col sm:flex-row space-y-4 sm:space-y-0 sm:space-x-4">
<button class="px-6 py-3 bg-blue-600 text-white font-medium rounded-lg hover:bg-blue-700 transition shadow-md hover:shadow-lg">
Начать проект
</button>
<button class="px-6 py-3 border border-blue-600 text-blue-600 font-medium rounded-lg hover:bg-blue-50 transition">
Демо <i data-feather="play-circle" class="inline ml-2"></i>
</button>
</div>
</div>
<div class="md:w-1/2 relative">
<div class="relative w-full h-64 md:h-96">
<svg viewBox="0 0 500 300" class="w-full h-full">
<!-- Duct system animation -->
<path class="airflow-path" fill="none" stroke="#3b82f6" stroke-width="2" d="M50,150 Q150,50 250,150 Q350,250 450,150" />
<!-- Main duct -->
<rect x="50" y="140" width="400" height="20" rx="10" fill="#e5e7eb" class="duct-animation" />
<!-- Branch ducts -->
<rect x="150" y="140" width="20" height="100" rx="10" fill="#9ca3af" class="duct-animation" />
<rect x="300" y="40" width="20" height="100" rx="10" fill="#9ca3af" class="duct-animation" />
<!-- Elbows -->
<path d="M150,240 Q150,190 200,190" fill="none" stroke="#9ca3af" stroke-width="20" stroke-linecap="round" class="duct-animation" />
<path d="M300,140 Q300,90 250,90" fill="none" stroke="#9ca3af" stroke-width="20" stroke-linecap="round" class="duct-animation" />
<!-- Airflow indicators -->
<circle cx="70" cy="150" r="5" fill="#3b82f6">
<animate attributeName="cx" values="70;90;70" dur="2s" repeatCount="indefinite" />
</circle>
<circle cx="170" cy="150" r="5" fill="#3b82f6">
<animate attributeName="cx" values="170;190;170" dur="2s" repeatCount="indefinite" />
</circle>
<circle cx="320" cy="150" r="5" fill="#3b82f6">
<animate attributeName="cx" values="320;340;320" dur="2s" repeatCount="indefinite" />
</circle>
</svg>
</div>
</div>
</div>
</section>
<!-- Product Categories -->
<section class="py-16 px-4 bg-white bg-opacity-90 backdrop-blur-sm">
<div class="container mx-auto">
<h2 class="text-3xl font-bold text-center text-gray-800 mb-12">Компоненты вентиляции</h2>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
<!-- Ducting -->
<div class="duct-item bg-white rounded-xl shadow-md overflow-hidden transition-all duration-300 hover:shadow-xl">
<div class="h-48 bg-gradient-to-br from-blue-50 to-blue-100 flex items-center justify-center">
<svg xmlns="http://www.w3.org/2000/svg" class="h-24 w-24 text-blue-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" />
</svg>
</div>
<div class="p-6">
<h3 class="text-xl font-semibold text-gray-800 mb-2">Воздуховоды</h3>
<p class="text-gray-600 mb-4">Прямоугольные, круглые и спиральные воздуховоды различных материалов и размеров.</p>
<button class="text-blue-600 font-medium flex items-center">
Каталог
<i data-feather="arrow-right" class="ml-2 w-4 h-4"></i>
</button>
</div>
</div>
<!-- Fittings -->
<div class="duct-item bg-white rounded-xl shadow-md overflow-hidden transition-all duration-300 hover:shadow-xl">
<div class="h-48 bg-gradient-to-br from-green-50 to-green-100 flex items-center justify-center">
<svg xmlns="http://www.w3.org/2000/svg" class="h-24 w-24 text-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z" />
</svg>
</div>
<div class="p-6">
<h3 class="text-xl font-semibold text-gray-800 mb-2">Фасонные части</h3>
<p class="text-gray-600 mb-4">Отводы, переходы, тройники и другие соединительные элементы.</p>
<button class="text-green-600 font-medium flex items-center">
Каталог
<i data-feather="arrow-right" class="ml-2 w-4 h-4"></i>
</button>
</div>
</div>
<!-- Dampers & Valves -->
<div class="duct-item bg-white rounded-xl shadow-md overflow-hidden transition-all duration-300 hover:shadow-xl">
<div class="h-48 bg-gradient-to-br from-purple-50 to-purple-100 flex items-center justify-center">
<svg xmlns="http://www.w3.org/2000/svg" class="h-24 w-24 text-purple-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 15l8-8m0 0l-8-8m8 8H4" />
</svg>
</div>
<div class="p-6">
<h3 class="text-xl font-semibold text-gray-800 mb-2">Задвижки и клапаны</h3>
<p class="text-gray-600 mb-4">Регулировка воздушного потока с помощью наших заслонок и балансировочных клапанов.</p>
<button class="text-purple-600 font-medium flex items-center">
Каталог
<i data-feather="arrow-right" class="ml-2 w-4 h-4"></i>
</button>
</div>
</div>
<!-- Accessories -->
<div class="duct-item bg-white rounded-xl shadow-md overflow-hidden transition-all duration-300 hover:shadow-xl">
<div class="h-48 bg-gradient-to-br from-yellow-50 to-yellow-100 flex items-center justify-center">
<svg xmlns="http://www.w3.org/2000/svg" class="h-24 w-24 text-yellow-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
</svg>
</div>
<div class="p-6">
<h3 class="text-xl font-semibold text-gray-800 mb-2">Аксессуары</h3>
<p class="text-gray-600 mb-4">Крепежи, изоляция, герметики и другие монтажные элементы.</p>
<button class="text-yellow-600 font-medium flex items-center">
Каталог
<i data-feather="arrow-right" class="ml-2 w-4 h-4"></i>
</button>
</div>
</div>
</div>
</div>
</section>
<!-- Size Calculator -->
<section class="py-16 px-4 bg-gray-50 bg-opacity-90 backdrop-blur-sm">
<div class="container mx-auto max-w-4xl">
<div class="bg-white rounded-xl shadow-lg overflow-hidden">
<div class="md:flex">
<div class="md:w-1/2 p-8 bg-gradient-to-br from-blue-500 to-blue-600 text-white">
<h2 class="text-2xl font-bold mb-4">Калькулятор размеров</h2>
<p class="mb-6">Быстрый расчет оптимального размера воздуховода для ваших требований по воздушному потоку.</p>
<div class="space-y-4">
<div>
<label class="block text-sm font-medium mb-1">Расход воздуха (м³/ч)</label>
<input id="airflow-input" type="range" min="100" max="5000" value="500" class="w-full h-2 bg-blue-300 rounded-lg appearance-none cursor-pointer">
<div class="flex justify-between text-xs text-blue-100 mt-1">
<span>100</span>
<span>5000</span>
</div>
<input id="airflow-value" type="number" min="100" max="5000" value="500" class="w-full px-2 py-1 mt-1 text-sm border border-blue-300 rounded">
</div>
<div>
<label class="block text-sm font-medium mb-1">Скорость (м/с)</label>
<input id="velocity-input" type="range" min="2" max="10" step="0.1" value="3" class="w-full h-2 bg-blue-300 rounded-lg appearance-none cursor-pointer">
<div class="flex justify-between text-xs text-blue-100 mt-1">
<span>2</span>
<span>10</span>
</div>
<input id="velocity-value" type="number" min="2" max="10" step="0.1" value="3" class="w-full px-2 py-1 mt-1 text-sm border border-blue-300 rounded">
</div>
<div>
<label class="block text-sm font-medium mb-1">Потери давления (Па/м)</label>
<input id="pressure-input" type="range" min="0.1" max="5" step="0.1" value="0.8" class="w-full h-2 bg-blue-300 rounded-lg appearance-none cursor-pointer">
<div class="flex justify-between text-xs text-blue-100 mt-1">
<span>0.1</span>
<span>5</span>
</div>
<input id="pressure-value" type="number" min="0.1" max="5" step="0.1" value="0.8" class="w-full px-2 py-1 mt-1 text-sm border border-blue-300 rounded">
</div>
<div>
<label class="block text-sm font-medium mb-1">Форма воздуховода</label>
<div class="flex space-x-4">
<button id="round-btn" class="px-3 py-1 bg-blue-700 rounded-md">Круглый</button>
<button id="rect-btn" class="px-3 py-1 bg-blue-400 rounded-md">Прямоугольный</button>
</div>
</div>
<div id="rectangular-size" class="hidden">
<div class="grid grid-cols-2 gap-4">
<div>
<label class="block text-sm font-medium mb-1">А Высота (мм)</label>
<input id="rect-height" type="number" min="100" max="1000" value="300" class="w-full px-3 py-2 border border-blue-300 rounded-md">
</div>
<div>
<label class="block text-sm font-medium mb-1">Б Ширина (мм)</label>
<input id="rect-width" type="number" min="100" max="1000" value="300" class="w-full px-3 py-2 border border-blue-300 rounded-md">
</div>
</div>
</div>
<div id="round-size">
<div>
<label class="block text-sm font-medium mb-1">А Диаметр (мм)</label>
<input id="round-diameter" type="number" min="100" max="1000" value="300" class="w-full px-3 py-2 border border-blue-300 rounded-md">
</div>
</div>
</div>
</div>
<div class="md:w-1/2 p-8">
<h3 class="text-xl font-semibold text-gray-800 mb-4">Рекомендуемый размер</h3>
<div id="size-display" class="flex items-center justify-center mb-6">
<div class="text-center">
<div class="w-32 h-32 rounded-full border-8 border-blue-100 flex items-center justify-center mx-auto mb-4">
<span id="size-value" class="text-2xl font-bold text-blue-600">8"</span>
</div>
<p id="size-description" class="text-sm text-gray-600">Диаметр круглого воздуховода</p>
</div>
</div>
<div class="grid grid-cols-3 gap-4 mb-6">
<div class="text-center">
<p class="text-sm text-gray-600">Давление скорости</p>
<p id="velocity-pressure" class="font-semibold">0.06 мм. вод. ст.</p>
</div>
<div class="text-center">
<p class="text-sm text-gray-600">Потери давления</p>
<p id="pressure-loss" class="font-semibold">0.08 Па/м</p>
</div>
<div class="text-center">
<p class="text-sm text-gray-600">Эквивалентный диаметр</p>
<p id="equiv-diameter" class="font-semibold">300 мм</p>
</div>
</div>
<button class="w-full py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition">
Добавить в проект
</button>
</div>
</div>
</div>
</div>
</section>
<!-- Project Showcase -->
<section class="py-16 px-4 bg-white bg-opacity-90 backdrop-blur-sm">
<div class="container mx-auto">
<div class="text-center mb-12">
<h2 class="text-3xl font-bold text-gray-800 mb-4">Последние проекты</h2>
<p class="text-gray-600 max-w-2xl mx-auto">Посмотрите, как профессионалы используют компоненты BreezyDucts в реальных монтажах</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
<div class="relative group overflow-hidden rounded-xl shadow-md h-64">
<img src="http://static.photos/industry/640x360/1" alt="Commercial HVAC" class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-110">
<div class="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex items-end p-6">
<div>
<h3 class="text-white font-semibold text-lg">Офисный комплекс</h3>
<p class="text-blue-200">1000 м спиральных воздуховодов</p>
</div>
</div>
</div>
<div class="relative group overflow-hidden rounded-xl shadow-md h-64">
<img src="http://static.photos/construction/640x360/2" alt="Hospital HVAC" class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-110">
<div class="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex items-end p-6">
<div>
<h3 class="text-white font-semibold text-lg">Вентиляция больницы</h3>
<p class="text-blue-200">Специальная обработка воздуха</p>
</div>
</div>
</div>
<div class="relative group overflow-hidden rounded-xl shadow-md h-64">
<img src="http://static.photos/education/640x360/3" alt="School HVAC" class="w-full h-full object-cover transition-transform duration-500 group-hover:scale-110">
<div class="absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex items-end p-6">
<div>
<h3 class="text-white font-semibold text-lg">Университетская лаборатория</h3>
<p class="text-blue-200">Вытяжная система для вытяжных шкафов</p>
</div>
</div>
</div>
</div>
<div class="text-center mt-12">
<button class="px-6 py-3 bg-white border border-blue-600 text-blue-600 font-medium rounded-lg hover:bg-blue-50 transition">
Все кейсы
</button>
</div>
</div>
</section>
<!-- Footer -->
<footer class="bg-gray-800 text-white py-12 px-4">
<div class="container mx-auto">
<div class="grid grid-cols-1 md:grid-cols-4 gap-8">
<div>
<div class="flex items-center space-x-2 mb-4">
<svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-blue-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" />
</svg>
<span class="text-xl font-bold">BreezyDucts</span>
</div>
<p class="text-gray-400 mb-4">Профессиональные вентиляционные решения для подрядчиков и монтажников ОВК.</p>
<div class="flex space-x-4">
<a href="#" class="text-gray-400 hover:text-white transition">
<i data-feather="facebook"></i>
</a>
<a href="#" class="text-gray-400 hover:text-white transition">
<i data-feather="twitter"></i>
</a>
<a href="#" class="text-gray-400 hover:text-white transition">
<i data-feather="linkedin"></i>
</a>
<a href="#" class="text-gray-400 hover:text-white transition">
<i data-feather="youtube"></i>
</a>
</div>
</div>
<div>
<h3 class="text-lg font-semibold mb-4">Продукция</h3>
<ul class="space-y-2">
<li><a href="#" class="text-gray-400 hover:text-white transition">Воздуховоды</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Фасонные части</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Заслонки</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Аксессуары</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Новинки</a></li>
</ul>
</div>
<div>
<h3 class="text-lg font-semibold mb-4">Ресурсы</h3>
<ul class="space-y-2">
<li><a href="#" class="text-gray-400 hover:text-white transition">Чертежи CAD</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Технические характеристики</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Инструкции по монтажу</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Инженерные данные</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Технические статьи</a></li>
<li><a href="#" class="text-gray-400 hover:text-white transition">Технические статьи</a></li>
</ul>
</div>
<div>
<h3 class="text-lg font-semibold mb-4">Контакты</h3>
<ul class="space-y-2">
<li class="flex items-start">
<i data-feather="map-pin" class="w-4 h-4 mt-1 mr-2"></i>
<span class="text-gray-400">ул. Вентиляционная, 123, Москва, 123456</span>
</li>
<li class="flex items-center">
<i data-feather="phone" class="w-4 h-4 mr-2"></i>
<span class="text-gray-400">+7 (800) 555-35-35</span>
</li>
<li class="flex items-center">
<i data-feather="mail" class="w-4 h-4 mr-2"></i>
<span class="text-gray-400">info@breezyducts.ru</span>
</li>
</ul>
</div>
</div>
<div class="border-t border-gray-700 mt-12 pt-8 flex flex-col md:flex-row justify-between items-center">
<p class="text-gray-400 mb-4 md:mb-0">© 2023 BreezyDucts. Все права защищены.</p>
<div class="flex space-x-6">
<a href="#" class="text-gray-400 hover:text-white transition">Политика конфиденциальности</a>
<a href="#" class="text-gray-400 hover:text-white transition">Условия использования</a>
<a href="#" class="text-gray-400 hover:text-white transition">Карта сайта</a>
</div>
</div>
</div>
</footer>
</div>
<script>
// Initialize Vanta.js background
VANTA.WAVES({
el: "#vanta-background",
mouseControls: true,
touchControls: true,
gyroControls: false,
minHeight: 200.00,
minWidth: 200.00,
scale: 1.00,
scaleMobile: 1.00,
color: 0x3b82f6,
shininess: 35.00,
waveHeight: 10.00,
waveSpeed: 0.75,
zoom: 0.85
});
// Initialize feather icons
feather.replace();
// Form handlers and calculations
const roundBtn = document.getElementById('round-btn');
const rectBtn = document.getElementById('rect-btn');
const roundInput = document.getElementById('round-diameter');
const rectHeight = document.getElementById('rect-height');
const rectWidth = document.getElementById('rect-width');
const airflowInput = document.getElementById('airflow-input');
const airflowValue = document.getElementById('airflow-value');
const velocityInput = document.getElementById('velocity-input');
const velocityValue = document.getElementById('velocity-value');
const pressureInput = document.getElementById('pressure-input');
const pressureValue = document.getElementById('pressure-value');
let isRound = true;
// Toggle between round and rectangular ducts
roundBtn.addEventListener('click', function() {
isRound = true;
roundBtn.classList.add('bg-blue-700');
roundBtn.classList.remove('bg-blue-400');
rectBtn.classList.add('bg-blue-400');
rectBtn.classList.remove('bg-blue-700');
document.getElementById('round-size').classList.remove('hidden');
document.getElementById('rectangular-size').classList.add('hidden');
document.getElementById('size-description').textContent = 'Диаметр круглого воздуховода';
calculateAll();
});
rectBtn.addEventListener('click', function() {
isRound = false;
rectBtn.classList.add('bg-blue-700');
rectBtn.classList.remove('bg-blue-400');
roundBtn.classList.add('bg-blue-400');
roundBtn.classList.remove('bg-blue-700');
document.getElementById('rectangular-size').classList.remove('hidden');
document.getElementById('round-size').classList.add('hidden');
document.getElementById('size-description').textContent = 'Размеры прямоугольного воздуховода';
calculateAll();
});
// Connect range and number inputs
airflowInput.addEventListener('input', function() {
airflowValue.value = this.value;
calculateFromAirflowVelocity();
});
airflowValue.addEventListener('input', function() {
airflowInput.value = this.value;
calculateFromAirflowVelocity();
});
velocityInput.addEventListener('input', function() {
velocityValue.value = this.value;
calculateFromAirflowVelocity();
});
velocityValue.addEventListener('input', function() {
velocityInput.value = this.value;
calculateFromAirflowVelocity();
});
pressureInput.addEventListener('input', function() {
pressureValue.value = this.value;
calculateFromPressure();
});
pressureValue.addEventListener('input', function() {
pressureInput.value = this.value;
calculateFromPressure();
});
// Duct size inputs
roundInput.addEventListener('input', function() {
document.getElementById('size-value').textContent = `${this.value}мм`;
calculateFromSize();
});
rectHeight.addEventListener('input', function() {
document.getElementById('size-value').textContent = `${rectWidth.value}×${this.value}мм`;
calculateFromSize();
});
rectWidth.addEventListener('input', function() {
document.getElementById('size-value').textContent = `${this.value}×${rectHeight.value}мм`;
calculateFromSize();
});
function calculateAll() {
const airflow = parseFloat(airflowValue.value);
const velocity = parseFloat(velocityValue.value);
// Calculate equivalent diameter for rectangular ducts
if (!isRound) {
const a = parseFloat(rectHeight.value) / 1000;
const b = parseFloat(rectWidth.value) / 1000;
const equivD = 1.3 * Math.pow(a * b, 0.625) / Math.pow(a + b, 0.25);
document.getElementById('equiv-diameter').textContent = `${Math.round(equivD * 1000)} мм`;
}
// Calculate velocity pressure (dynamic pressure)
const airDensity = 1.2; // kg/m³
const velocityPressure = 0.5 * airDensity * Math.pow(velocity, 2);
document.getElementById('velocity-pressure').textContent = `${velocityPressure.toFixed(2)} Па`;
// Calculate pressure loss (simplified Darcy-Weisbach)
const diameter = isRound ? parseFloat(roundInput.value)/1000 :
1.3 * Math.pow((rectHeight.value/1000 * rectWidth.value/1000), 0.625) /
Math.pow((rectHeight.value/1000 + rectWidth.value/1000), 0.25);
const frictionFactor = 0.02; // typical for galvanized steel
const pressureLoss = frictionFactor * (1/diameter) * velocityPressure;
document.getElementById('pressure-loss').textContent = `${pressureLoss.toFixed(2)} Па/м`;
}
function calculateFromAirflowVelocity() {
const airflow = parseFloat(airflowValue.value); // m³/h
const velocity = parseFloat(velocityValue.value); // m/s
// Calculate required duct size
const area = (airflow / 3600) / velocity; // m²
if (isRound) {
const diameter = Math.sqrt(4 * area / Math.PI) * 1000; // mm
roundInput.value = Math.round(diameter);
document.getElementById('size-value').textContent = `${Math.round(diameter)}мм`;
} else {
// For rectangular, maintain aspect ratio ~1:2
const height = Math.sqrt(area * 2) * 1000;
const width = height / 2;
rectHeight.value = Math.round(height);
rectWidth.value = Math.round(width);
document.getElementById('size-value').textContent = `${Math.round(width)}×${Math.round(height)}мм`;
}
calculateAll();
}
function calculateFromPressure() {
const pressureLoss = parseFloat(pressureValue.value); // Pa/m
const airflow = parseFloat(airflowValue.value); // m³/h
// Simplified calculation - in reality this would use ductulator formulas
const velocity = Math.sqrt(2 * pressureLoss * (isRound ? roundInput.value/1000 :
1.3 * Math.pow((rectHeight.value/1000 * rectWidth.value/1000), 0.625) /
Math.pow((rectHeight.value/1000 + rectWidth.value/1000), 0.25)) / 0.02);
velocityInput.value = velocity.toFixed(1);
velocityValue.value = velocity.toFixed(1);
calculateFromAirflowVelocity();
}
function calculateFromSize() {
const diameter = isRound ? parseFloat(roundInput.value)/1000 :
1.3 * Math.pow((rectHeight.value/1000 * rectWidth.value/1000), 0.625) /
Math.pow((rectHeight.value/1000 + rectWidth.value/1000), 0.25);
const area = isRound ? Math.PI * Math.pow(diameter, 2) / 4 :
(rectHeight.value/1000 * rectWidth.value/1000);
const airflow = parseFloat(airflowValue.value); // m³/h
const velocity = (airflow / 3600) / area; // m/s
velocityInput.value = velocity.toFixed(1);
velocityValue.value = velocity.toFixed(1);
calculateAll();
}
// Initialize calculations
calculateAll();
// Simple animation for duct items
document.querySelectorAll('.duct-item').forEach((item, index) => {
item.style.transitionDelay = `${index * 100}ms`;
item.style.opacity = '0';
item.style.transform = 'translateY(20px)';
setTimeout(() => {
item.style.opacity = '1';
item.style.transform = 'translateY(0)';
}, 500 + (index * 100));
});
// Animate the airflow path
const path = document.querySelector('.airflow-path');
if (path) {
const length = path.getTotalLength();
path.style.strokeDasharray = length;
path.style.strokeDashoffset = length;
// Trigger the animation when the element is in view
const observer = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting) {
path.style.animation = 'dash 3s linear forwards';
}
});
observer.observe(path);
}
</script>
</body>
</html>