227 lines
6.0 KiB
JavaScript
227 lines
6.0 KiB
JavaScript
// ✅ DOM READY (IMPORTANT)
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
|
|
// =============================
|
|
// AOS INIT
|
|
// =============================
|
|
if (typeof AOS !== "undefined") {
|
|
AOS.init({
|
|
duration: 1000,
|
|
once: true
|
|
});
|
|
}
|
|
|
|
// =============================
|
|
// TRADES SWIPER
|
|
// =============================
|
|
if (typeof Swiper !== "undefined") {
|
|
new Swiper(".tradesSwiper", {
|
|
loop: true,
|
|
slidesPerView: 3,
|
|
spaceBetween: 25,
|
|
speed: 1500,
|
|
autoplay: {
|
|
delay: 0,
|
|
disableOnInteraction: false,
|
|
},
|
|
freeMode: true,
|
|
freeModeMomentum: false,
|
|
pagination: {
|
|
el: ".swiper-pagination",
|
|
clickable: true,
|
|
},
|
|
breakpoints: {
|
|
0: { slidesPerView: 1 },
|
|
768: { slidesPerView: 2 },
|
|
1024: { slidesPerView: 3 }
|
|
}
|
|
});
|
|
|
|
// =============================
|
|
// TESTIMONIAL SWIPER
|
|
// =============================
|
|
new Swiper(".testimonialSwiper", {
|
|
slidesPerView: 3,
|
|
spaceBetween: 30,
|
|
loop: true,
|
|
speed: 800,
|
|
centeredSlides: true,
|
|
autoplay: {
|
|
delay: 2500,
|
|
disableOnInteraction: false,
|
|
},
|
|
pagination: {
|
|
el: ".swiper-pagination",
|
|
clickable: true,
|
|
},
|
|
breakpoints: {
|
|
0: { slidesPerView: 1.2, centeredSlides: true },
|
|
768: { slidesPerView: 2 },
|
|
1024: { slidesPerView: 3 }
|
|
}
|
|
});
|
|
|
|
// =============================
|
|
// EXPERTISE SWIPER
|
|
// =============================
|
|
new Swiper(".expertise-slider", {
|
|
slidesPerView: 3,
|
|
spaceBetween: 25,
|
|
loop: true,
|
|
speed: 800,
|
|
autoplay: {
|
|
delay: 2500,
|
|
disableOnInteraction: false,
|
|
},
|
|
pagination: {
|
|
el: ".swiper-pagination",
|
|
clickable: true,
|
|
},
|
|
breakpoints: {
|
|
0: { slidesPerView: 1.2 },
|
|
576: { slidesPerView: 2 },
|
|
992: { slidesPerView: 3 }
|
|
}
|
|
});
|
|
}
|
|
|
|
// =============================
|
|
// IMAGE COMPARISON SLIDER
|
|
// =============================
|
|
function initComparisons() {
|
|
const overlays = document.querySelectorAll(".img-comp-overlay");
|
|
|
|
overlays.forEach(img => {
|
|
let w = img.offsetWidth;
|
|
let h = img.offsetHeight;
|
|
|
|
img.style.width = (w / 2) + "px";
|
|
|
|
const slider = document.createElement("div");
|
|
slider.className = "img-comp-slider";
|
|
img.parentElement.insertBefore(slider, img);
|
|
|
|
slider.style.top = (h / 2) + "px";
|
|
slider.style.left = (w / 2) + "px";
|
|
|
|
let clicked = false;
|
|
|
|
const start = (e) => {
|
|
e.preventDefault();
|
|
clicked = true;
|
|
};
|
|
|
|
const stop = () => clicked = false;
|
|
|
|
const move = (e) => {
|
|
if (!clicked) return;
|
|
|
|
const rect = img.getBoundingClientRect();
|
|
let x = (e.touches ? e.touches[0].pageX : e.pageX) - rect.left;
|
|
x = Math.max(0, Math.min(x, w));
|
|
|
|
img.style.width = x + "px";
|
|
slider.style.left = x + "px";
|
|
};
|
|
|
|
slider.addEventListener("mousedown", start);
|
|
window.addEventListener("mouseup", stop);
|
|
window.addEventListener("mousemove", move);
|
|
|
|
slider.addEventListener("touchstart", start);
|
|
window.addEventListener("touchend", stop);
|
|
window.addEventListener("touchmove", move);
|
|
});
|
|
}
|
|
|
|
window.addEventListener("load", initComparisons);
|
|
|
|
// =============================
|
|
// MENU HOVER IMAGE CHANGE
|
|
// =============================
|
|
const menuItems = document.querySelectorAll(".menu-left li");
|
|
const image = document.getElementById("serviceImage");
|
|
|
|
if (menuItems.length && image) {
|
|
const images = {
|
|
img1: "/assets/images/menuimages.png",
|
|
img2: "/assets/images/menuimages1.png",
|
|
img3: "/assets/images/menuimages2.png",
|
|
img4: "/assets/images/menuimages3.png",
|
|
img5: "/assets/images/menuimages4.png",
|
|
img6: "/assets/images/documentmenu.png",
|
|
img7: "/assets/images/sunroommenu.png"
|
|
};
|
|
|
|
const first = menuItems[0];
|
|
if (first) {
|
|
image.src = images[first.dataset.img];
|
|
first.classList.add("active");
|
|
}
|
|
|
|
menuItems.forEach(item => {
|
|
item.addEventListener("mouseenter", () => {
|
|
menuItems.forEach(i => i.classList.remove("active"));
|
|
item.classList.add("active");
|
|
|
|
image.style.opacity = 0;
|
|
|
|
setTimeout(() => {
|
|
image.src = images[item.dataset.img];
|
|
image.style.opacity = 1;
|
|
}, 200);
|
|
});
|
|
});
|
|
}
|
|
|
|
// =============================
|
|
// TABS
|
|
// =============================
|
|
window.changeTab = function (id) {
|
|
const data = {
|
|
1: {
|
|
title: "We personally oversee every detail...",
|
|
text: "We ensure design consistency...",
|
|
img: "/assets/images/PersonallyOversee.png"
|
|
},
|
|
2: {
|
|
title: "We personally oversee every detail...",
|
|
text: "We verify materials...",
|
|
img: "/assets/images/PersonallyOversee.png"
|
|
}
|
|
};
|
|
|
|
document.querySelectorAll(".tab-box").forEach(el => el.classList.remove("active"));
|
|
document.querySelectorAll(".tab-box")[id - 1]?.classList.add("active");
|
|
|
|
document.getElementById("contentTitle").innerText = data[id].title;
|
|
document.getElementById("contentText").innerText = data[id].text;
|
|
document.getElementById("mainImage").src = data[id].img;
|
|
};
|
|
|
|
// =============================
|
|
// FILTER GALLERY
|
|
// =============================
|
|
const filterBtns = document.querySelectorAll(".filter-btn");
|
|
const galleryItems = document.querySelectorAll(".gallery-item");
|
|
|
|
if (filterBtns.length && galleryItems.length) {
|
|
filterBtns.forEach(btn => {
|
|
btn.addEventListener("click", () => {
|
|
|
|
filterBtns.forEach(b => b.classList.remove("active"));
|
|
btn.classList.add("active");
|
|
|
|
const filter = btn.dataset.filter;
|
|
|
|
galleryItems.forEach(item => {
|
|
const category = item.dataset.category;
|
|
|
|
item.classList.toggle("hide", !(filter === "all" || filter === category));
|
|
});
|
|
|
|
});
|
|
});
|
|
}
|
|
|
|
}); |