1 Commits

Author SHA1 Message Date
greggy
1fcdca95b7 refactor(js): remove jQuery dependency and replace with vanilla JS
All checks were successful
Deploy Feature Branch to Test / deploy (push) Successful in 24s
- Rewrite haus-schleusingen.js entirely in vanilla JavaScript
- Use IntersectionObserver instead of scroll event for scroll animations
- Replace jQuery slideUp/slideDown with display toggle for accordion
- Replace jQuery fadeIn with CSS opacity transition for form success
- Remove jQuery CDN script tag from haus-schleusingen.html
- Delete unused masonry.pkgd.min.js
- Remove jquery globals from eslint.config.js

Ref #19
2026-05-15 07:57:01 +00:00
44 changed files with 187 additions and 214 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -13,7 +13,6 @@ module.exports = [
sourceType: "script", sourceType: "script",
globals: { globals: {
...globals.browser, ...globals.browser,
...globals.jquery,
}, },
}, },
plugins: { plugins: {

207
index.php
View File

@@ -182,7 +182,6 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
</script> </script>
<link rel="stylesheet" href="fonts/fonts.css" /> <link rel="stylesheet" href="fonts/fonts.css" />
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<link rel="stylesheet" href="css/haus-schleusingen.css" /> <link rel="stylesheet" href="css/haus-schleusingen.css" />
</head> </head>
<body> <body>
@@ -210,7 +209,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<div <div
class="hero-bg" class="hero-bg"
id="heroBg" id="heroBg"
style="background-image: url(bilder/Außenansicht-2.webp)" style="background-image: url(bilder/Außenansicht-2.png)"
></div> ></div>
<div class="hero-overlay"></div> <div class="hero-overlay"></div>
<div class="hero-content" id="heroContent"> <div class="hero-content" id="heroContent">
@@ -283,10 +282,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
</div> </div>
</div> </div>
<div class="intro-img" data-animate> <div class="intro-img" data-animate>
<picture> <img src="bilder/wohnzimmer2.png" alt="Wohnzimmer" />
<source srcset="bilder/wohnzimmer2.webp" type="image/webp">
<img src="bilder/wohnzimmer2.png" alt="Wohnzimmer" loading="lazy" />
</picture>
<div class="intro-img-badge">Wohnzimmer · 42,6 m²</div> <div class="intro-img-badge">Wohnzimmer · 42,6 m²</div>
</div> </div>
</section> </section>
@@ -301,88 +297,55 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
<div class="masonry-grid"> <div class="masonry-grid">
<div class="grid-sizer"></div> <div class="grid-sizer"></div>
<div class="grid-item" data-img="bilder/Außenansicht-2.webp"> <div class="grid-item" data-img="bilder/Außenansicht-2.png">
<picture> <img src="bilder/Außenansicht-2-small.png" alt="Außenansicht" />
<source srcset="bilder/Außenansicht-2-small.webp" type="image/webp">
<img src="bilder/Außenansicht-2-small.png" alt="Außenansicht" loading="lazy" />
</picture>
<span class="grid-item-label">Außenansicht</span> <span class="grid-item-label">Außenansicht</span>
</div> </div>
<div class="grid-item" data-img="bilder/wohnzimmer2.webp"> <div class="grid-item" data-img="bilder/wohnzimmer2.png">
<picture> <img src="bilder/wohnzimmer2-small.png" alt="Wohnzimmer" />
<source srcset="bilder/wohnzimmer2-small.webp" type="image/webp">
<img src="bilder/wohnzimmer2-small.png" alt="Wohnzimmer" loading="lazy" />
</picture>
<span class="grid-item-label">Wohnzimmer · 42,6 m²</span> <span class="grid-item-label">Wohnzimmer · 42,6 m²</span>
</div> </div>
<div class="grid-item" data-img="bilder/Küche 1.webp"> <div class="grid-item" data-img="bilder/Küche 1.jpg">
<picture> <img src="bilder/Küche 1.jpg" alt="Küche" />
<source srcset="bilder/Küche 1-small.webp" type="image/webp">
<img src="bilder/Küche 1.jpg" alt="Küche" loading="lazy" />
</picture>
<span class="grid-item-label">Küche · 18,4 m²</span> <span class="grid-item-label">Küche · 18,4 m²</span>
</div> </div>
<div class="grid-item" data-img="bilder/schlafzimmer.webp"> <div class="grid-item" data-img="bilder/schlafzimmer.png">
<picture> <img src="bilder/schlafzimmer-small.png" alt="Schlafzimmer" />
<source srcset="bilder/schlafzimmer-small.webp" type="image/webp">
<img src="bilder/schlafzimmer-small.png" alt="Schlafzimmer" loading="lazy" />
</picture>
<span class="grid-item-label">Schlafzimmer · 18 m²</span> <span class="grid-item-label">Schlafzimmer · 18 m²</span>
</div> </div>
<div class="grid-item" data-img="bilder/Bad.webp"> <div class="grid-item" data-img="bilder/Bad.jpg">
<picture> <img src="bilder/Bad.jpg" alt="Badezimmer" />
<source srcset="bilder/Bad-small.webp" type="image/webp">
<img src="bilder/Bad.jpg" alt="Badezimmer" loading="lazy" />
</picture>
<span class="grid-item-label">Badezimmer · 9,8 m²</span> <span class="grid-item-label">Badezimmer · 9,8 m²</span>
</div> </div>
<div class="grid-item" data-img="bilder/Kinderzimmer.webp"> <div class="grid-item" data-img="bilder/Kinderzimmer.png">
<picture> <img src="bilder/Kinderzimmer-small.png" alt="Kinderzimmer 1" />
<source srcset="bilder/Kinderzimmer-small.webp" type="image/webp">
<img src="bilder/Kinderzimmer-small.png" alt="Kinderzimmer 1" loading="lazy" />
</picture>
<span class="grid-item-label">Kinderzimmer 1 · 21,7 m²</span> <span class="grid-item-label">Kinderzimmer 1 · 21,7 m²</span>
</div> </div>
<div class="grid-item" data-img="bilder/Kinderzimmer 2.webp"> <div class="grid-item" data-img="bilder/Kinderzimmer 2.jpg">
<picture> <img src="bilder/Kinderzimmer 2-small.png" alt="Kinderzimmer 2" />
<source srcset="bilder/Kinderzimmer 2-small.webp" type="image/webp">
<img src="bilder/Kinderzimmer 2-small.png" alt="Kinderzimmer 2" loading="lazy" />
</picture>
<span class="grid-item-label">Kinderzimmer 2 · 15,7 m²</span> <span class="grid-item-label">Kinderzimmer 2 · 15,7 m²</span>
</div> </div>
<div class="grid-item" data-img="bilder/kinderzimmer 2 2.webp"> <div class="grid-item" data-img="bilder/kinderzimmer 2 2.jpeg">
<picture> <img src="bilder/kinderzimmer 2 2-small.png" alt="Kinderzimmer Detail" />
<source srcset="bilder/kinderzimmer 2 2-small.webp" type="image/webp">
<img src="bilder/kinderzimmer 2 2-small.png" alt="Kinderzimmer Detail" loading="lazy" />
</picture>
<span class="grid-item-label">Kinderzimmer Detail</span> <span class="grid-item-label">Kinderzimmer Detail</span>
</div> </div>
<div class="grid-item" data-img="bilder/Kinderzimmer 3.webp"> <div class="grid-item" data-img="bilder/Kinderzimmer 3.jpg">
<picture> <img src="bilder/Kinderzimmer 3-small.png" alt="Kinderzimmer 3" />
<source srcset="bilder/Kinderzimmer 3-small.webp" type="image/webp">
<img src="bilder/Kinderzimmer 3-small.png" alt="Kinderzimmer 3" loading="lazy" />
</picture>
<span class="grid-item-label">Gästezimmer · 11,5 m²</span> <span class="grid-item-label">Gästezimmer · 11,5 m²</span>
</div> </div>
<div class="grid-item" data-img="bilder/Bad-2.webp"> <div class="grid-item" data-img="bilder/Bad-2.jpg">
<picture> <img src="bilder/Bad-2-small.jpg" alt="Wohnbereich Detail 1" />
<source srcset="bilder/Bad-2-small.webp" type="image/webp">
<img src="bilder/Bad-2-small.jpg" alt="Wohnbereich Detail 1" loading="lazy" />
</picture>
<span class="grid-item-label">Wohnbereich</span> <span class="grid-item-label">Wohnbereich</span>
</div> </div>
<div class="grid-item" data-img="bilder/Bad-3.webp"> <div class="grid-item" data-img="bilder/bad3.jpg">
<picture> <img src="bilder/Bad-3-small.jpg" alt="Wohnbereich Detail 2" />
<source srcset="bilder/Bad-3-small.webp" type="image/webp">
<img src="bilder/Bad-3-small.jpg" alt="Wohnbereich Detail 2" loading="lazy" />
</picture>
<span class="grid-item-label">Wohnbereich Detail</span> <span class="grid-item-label">Wohnbereich Detail</span>
</div> </div>
<div class="grid-item" data-img="bilder/Bad-4.webp"> <div class="grid-item" data-img="bilder/WhatsApp Image 2026-03-30 at 07.50.42 (2).jpeg">
<picture> <img
<source srcset="bilder/Bad-4-small.webp" type="image/webp"> src="bilder/WhatsApp Image 2026-03-30 at 07.50.42 (2).jpeg"
<img src="bilder/Bad-4-small.jpg" alt="Wohnbereich Detail 3" loading="lazy" /> alt="Wohnbereich Detail 3"
</picture> />
<span class="grid-item-label">Hausansicht</span> <span class="grid-item-label">Hausansicht</span>
</div> </div>
</div> </div>
@@ -428,24 +391,16 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
</div> </div>
</div> </div>
<div class="floor-plan floor-plan-multi"> <div class="floor-plan floor-plan-multi">
<picture> <img
<source srcset="bilder/grundrisse/EG-small.webp" type="image/webp"> src="bilder/grundrisse/EG-small.jpg"
<img alt="Grundriss Erdgeschoss"
src="bilder/grundrisse/EG-small.jpg" data-img="bilder/grundrisse/EG.png"
alt="Grundriss Erdgeschoss" />
loading="lazy" <img
data-img="bilder/grundrisse/EG.webp" src="bilder/grundrisse/EG 3D-small.jpg"
/> alt="Grundriss Erdgeschoss"
</picture> data-img="bilder/grundrisse/EG 3D.png"
<picture> />
<source srcset="bilder/grundrisse/EG 3D-small.webp" type="image/webp">
<img
src="bilder/grundrisse/EG 3D-small.jpg"
alt="Grundriss Erdgeschoss"
loading="lazy"
data-img="bilder/grundrisse/EG 3D.webp"
/>
</picture>
</div> </div>
</div> </div>
</div> </div>
@@ -485,24 +440,16 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
</div> </div>
</div> </div>
<div class="floor-plan floor-plan-multi"> <div class="floor-plan floor-plan-multi">
<picture> <img
<source srcset="bilder/grundrisse/OG 1 2-small.webp" type="image/webp"> src="bilder/grundrisse/OG 1 2-small.jpg"
<img alt="Grundriss 1. Obergeschoss"
src="bilder/grundrisse/OG 1 2-small.jpg" data-img="bilder/grundrisse/OG 1 2.png"
alt="Grundriss 1. Obergeschoss" />
loading="lazy" <img
data-img="bilder/grundrisse/OG 1 2.webp" src="bilder/grundrisse/OG 1 3D-small.jpg"
/> alt="Grundriss 1. Obergeschoss"
</picture> data-img="bilder/grundrisse/OG 1 3D.png"
<picture> />
<source srcset="bilder/grundrisse/OG 1 3D-small.webp" type="image/webp">
<img
src="bilder/grundrisse/OG 1 3D-small.jpg"
alt="Grundriss 1. Obergeschoss"
loading="lazy"
data-img="bilder/grundrisse/OG 1 3D.webp"
/>
</picture>
</div> </div>
</div> </div>
</div> </div>
@@ -542,24 +489,16 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
</div> </div>
</div> </div>
<div class="floor-plan floor-plan-multi"> <div class="floor-plan floor-plan-multi">
<picture> <img
<source srcset="bilder/grundrisse/OG 2 grundriss-small.webp" type="image/webp"> src="bilder/grundrisse/OG 2 grundriss-small.jpg"
<img alt="Grundriss 2. Obergeschoss (1)"
src="bilder/grundrisse/OG 2 grundriss-small.jpg" data-img="bilder/grundrisse/OG 2 grundriss.png"
alt="Grundriss 2. Obergeschoss (1)" />
loading="lazy" <img
data-img="bilder/grundrisse/OG 2 grundriss.webp" src="bilder/grundrisse/OG 2 3D-small.jpg"
/> alt="Grundriss 2. Obergeschoss (1)"
</picture> data-img="bilder/grundrisse/OG 2 3D.png"
<picture> />
<source srcset="bilder/grundrisse/OG 2 3D-small.webp" type="image/webp">
<img
src="bilder/grundrisse/OG 2 3D-small.jpg"
alt="Grundriss 2. Obergeschoss (1)"
loading="lazy"
data-img="bilder/grundrisse/OG 2 3D.webp"
/>
</picture>
</div> </div>
</div> </div>
</div> </div>
@@ -587,24 +526,16 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
</div> </div>
</div> </div>
<div class="floor-plan floor-plan-multi"> <div class="floor-plan floor-plan-multi">
<picture> <img
<source srcset="bilder/grundrisse/Dachboden unten 2-small.webp" type="image/webp"> src="bilder/grundrisse/Dachboden unten 2-small.jpg"
<img alt="Grundriss Dachboden"
src="bilder/grundrisse/Dachboden unten 2-small.jpg" data-img="bilder/grundrisse/Dachboden unten 2.png"
alt="Grundriss Dachboden" />
loading="lazy" <img
data-img="bilder/grundrisse/Dachboden unten 2.webp" src="bilder/grundrisse/Dachboden unten-small.jpg"
/> alt="Grundriss Dachboden"
</picture> data-img="bilder/grundrisse/Dachboden unten.png"
<picture> />
<source srcset="bilder/grundrisse/Dachboden unten-small.webp" type="image/webp">
<img
src="bilder/grundrisse/Dachboden unten-small.jpg"
alt="Grundriss Dachboden"
loading="lazy"
data-img="bilder/grundrisse/Dachboden unten.webp"
/>
</picture>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,88 +1,144 @@
$(function () { document.addEventListener("DOMContentLoaded", function () {
// Navbar scroll // Navbar scroll
$(window).on("scroll", function () { var navbar = document.getElementById("navbar");
if ($(this).scrollTop() > 60) $("#navbar").addClass("scrolled"); window.addEventListener("scroll", function () {
else $("#navbar").removeClass("scrolled"); if (window.scrollY > 60) navbar.classList.add("scrolled");
else navbar.classList.remove("scrolled");
}); });
// Hero animation on load // Hero animation on load
setTimeout(function () { setTimeout(function () {
$("#heroContent").addClass("visible"); document.getElementById("heroContent").classList.add("visible");
$("#heroBg").addClass("loaded"); document.getElementById("heroBg").classList.add("loaded");
}, 200); }, 200);
// Scroll animations // Scroll animations via IntersectionObserver
function checkVisible() { var animElements = document.querySelectorAll(".fact, [data-animate]");
$(".fact, [data-animate]").each(function () { animElements.forEach(function (el) {
var el = $(this); el.style.opacity = "0";
var top = el.offset().top; el.style.transform = "translateY(30px)";
var windowBottom = $(window).scrollTop() + $(window).height(); el.style.transition = "opacity 0.8s ease, transform 0.8s ease";
if (windowBottom > top + 60) { });
el.addClass("visible");
el.css({ opacity: 1, transform: "translateY(0)" }); if ("IntersectionObserver" in window) {
} var observer = new IntersectionObserver(
function (entries) {
entries.forEach(function (entry) {
if (entry.isIntersecting) {
entry.target.classList.add("visible");
entry.target.style.opacity = "1";
entry.target.style.transform = "translateY(0)";
observer.unobserve(entry.target);
}
});
},
{ rootMargin: "0px 0px -60px 0px" }
);
animElements.forEach(function (el) {
observer.observe(el);
});
} else {
// Fallback: show all immediately
animElements.forEach(function (el) {
el.classList.add("visible");
el.style.opacity = "1";
el.style.transform = "translateY(0)";
}); });
} }
$("[data-animate]").css({
opacity: 0,
transform: "translateY(30px)",
transition: "opacity 0.8s ease, transform 0.8s ease",
});
$(window).on("scroll", checkVisible);
checkVisible();
// Floor accordion // Floor accordion
$(".floor-header").on("click", function () { document.querySelectorAll(".floor-header").forEach(function (header) {
var item = $(this).closest(".floor-item"); header.addEventListener("click", function () {
var isOpen = item.hasClass("open"); var item = this.closest(".floor-item");
$(".floor-item").removeClass("open"); var isOpen = item.classList.contains("open");
$(".floor-body").slideUp(300); var allItems = document.querySelectorAll(".floor-item");
if (!isOpen) {
item.addClass("open"); // Close all
item.find(".floor-body").slideDown(300); allItems.forEach(function (fi) {
} fi.classList.remove("open");
var body = fi.querySelector(".floor-body");
if (body) body.style.display = "none";
});
// Open clicked if it was closed
if (!isOpen) {
item.classList.add("open");
var body = item.querySelector(".floor-body");
if (body) body.style.display = "block";
}
});
}); });
// Lightbox gallery grid items // Lightbox gallery grid items
$(document).on("click", ".grid-item", function () { document.querySelectorAll(".grid-item").forEach(function (item) {
var src = $(this).data("img") || $(this).find("img").attr("src"); item.addEventListener("click", function () {
$("#lightboxImg").off("error").on("error", function () { var src = this.dataset.img || this.querySelector("img").getAttribute("src");
// WebP fallback: try original format openLightbox(src);
if ($(this).attr('src').endsWith('.webp')) {
$(this).attr('src', src.replace(/\.webp$/, '.png'));
}
}); });
$("#lightboxImg").attr("src", src);
$("#lightbox").addClass("open");
$("body").css("overflow", "hidden");
}); });
// Lightbox floor plan images in Raumaufteilung // Lightbox floor plan images in Raumaufteilung
$(document).on("click", ".floor-plan img[data-img]", function () { document.querySelectorAll(".floor-plan img[data-img]").forEach(function (img) {
var src = $(this).data("img"); img.addEventListener("click", function () {
$("#lightboxImg").off("error").on("error", function () { openLightbox(this.dataset.img);
if ($(this).attr('src').endsWith('.webp')) {
$(this).attr('src', src.replace(/\.webp$/, '.png'));
}
}); });
$("#lightboxImg").attr("src", src);
$("#lightbox").addClass("open");
$("body").css("overflow", "hidden");
}); });
$("#lightboxClose, #lightbox").on("click", function (e) {
if (e.target === this) { function openLightbox(src) {
$("#lightbox").removeClass("open"); document.getElementById("lightboxImg").setAttribute("src", src);
$("body").css("overflow", ""); document.getElementById("lightbox").classList.add("open");
} document.body.style.overflow = "hidden";
}
function closeLightbox() {
document.getElementById("lightbox").classList.remove("open");
document.body.style.overflow = "";
}
document.getElementById("lightboxClose").addEventListener("click", closeLightbox);
document.getElementById("lightbox").addEventListener("click", function (e) {
if (e.target === this) closeLightbox();
}); });
$(document).on("keydown", function (e) { document.addEventListener("keydown", function (e) {
if (e.key === "Escape") { if (e.key === "Escape") closeLightbox();
$("#lightbox").removeClass("open");
$("body").css("overflow", "");
}
}); });
// Form submit is handled server-side by PHP no JS intervention needed. // Form submit is handled server-side by PHP no JS intervention needed.
// Form submit opens email client with pre-filled mailto: link
document.getElementById("contactForm").addEventListener("submit", function (e) {
e.preventDefault();
var fname = document.getElementById("fname").value.trim();
var lname = document.getElementById("lname").value.trim();
var email = document.getElementById("email").value.trim();
var phone = document.getElementById("phone").value.trim();
var interest = document.getElementById("interest").value;
var message = document.getElementById("message").value.trim();
var subject = "Kontaktanfrage: " + interest;
var body = "Von: " + fname + " " + lname + "\n";
body += "E-Mail: " + email + "\n";
if (phone) body += "Telefon: " + phone + "\n";
body += "Anliegen: " + interest + "\n\n";
body += message;
var mailto =
"mailto:mki@kies-media.de" +
"?subject=" + encodeURIComponent(subject) +
"&body=" + encodeURIComponent(body);
window.location.href = mailto;
// Show success message
this.style.display = "none";
var success = document.getElementById("formSuccess");
success.style.display = "block";
success.style.opacity = "0";
success.style.transition = "opacity 0.4s ease";
requestAnimationFrame(function () {
success.style.opacity = "1";
});
});
}); });
// Mobile hamburger menu (vanilla JS) // Mobile hamburger menu (vanilla JS)

View File

@@ -5,20 +5,7 @@ server {
root /usr/share/nginx/html; root /usr/share/nginx/html;
index haus-schleusingen.html; index haus-schleusingen.html;
# Gzip aktivieren
gzip on;
gzip_types text/css application/javascript image/svg+xml application/json text/xml;
gzip_min_length 256;
gzip_vary on;
location / { location / {
try_files $uri $uri/ /haus-schleusingen.html; try_files $uri $uri/ /haus-schleusingen.html;
} }
}
# Lange Cache-Dauer für Bilder und statische Assets
location ~* \.(jpg|jpeg|png|webp|gif|ico|svg|css|js|woff2?)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
}
}