Files
Housecoins_next/public/assets/js/main.js
T
2026-04-27 15:32:30 +05:30

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));
});
});
});
}
});