Nielsen-Home-Improvements-LLC / javascript / script.js
script.js
Raw
/*NAVBAR MENU*/
let menuToggle = document.querySelector(".menuToggle");
let menuMobile = document.querySelector(".navul-wrapper");
let dropDownlinks = document.querySelector(".dropDownlinks");


document.getElementById('menuToggle').addEventListener(
  'click',
  function() {
    this.classList.toggle('menuToggle-active'),
    menuMobile.classList.toggle('open');
  }
);

document.addEventListener("DOMContentLoaded", function(){
  if (window.innerWidth < 1100) {
    document.getElementById('services-flex').addEventListener(
      'click',
      function() {
        this.classList.toggle('services-active'),
        dropDownlinks.classList.toggle('open');
      }
    );
  }

}); 




/*ANIMATIONS*/
const hidden = document.querySelectorAll(".hidden"),
  hiddentwo = document.querySelectorAll(".hiddentwo"),
  hiddenintro = document.querySelectorAll(".hiddenintro"),
  observer = new IntersectionObserver(
    (e) => {
      e.forEach((e) => {
        console.log(e),
          e.target.classList.toggle("show", e.isIntersecting),
          e.isIntersecting && observer.unobserve(e.target);
      });
    },
    { rootMargin: "0px", threshold: 0.6 }
  ),
  hiddenobs = new IntersectionObserver(
    (e) => {
      e.forEach((e) => {
        console.log(e),
          e.target.classList.toggle("show", e.isIntersecting),
          e.isIntersecting && hiddenobs.unobserve(e.target);
      });
    },
    { rootMargin: "0px", threshold: 0 }
  );
hidden.forEach((e) => {
  observer.observe(e);
}),
  hiddentwo.forEach((e) => {
    observer.observe(e);
  }),
  hiddenintro.forEach((e) => {
    hiddenobs.observe(e);
  });

  /*Review Slider*/ 
var swiper = new Swiper(".mySwiper", {
  slidesPerView: 1,
  centeredSlides: !1,
  slidesPerGroupSkip: 1,
  grabCursor: !0,
  keyboard: { enabled: !0 },
  navigation: { nextEl: ".swiper-button-next", prevEl: ".swiper-button-prev" },
  pagination: { el: ".swiper-pagination", clickable: !1, dynamicBullets: !0 },
  breakpoints: {
    0: { slidesPerView: 1 },
    650: { slidesPerView: 2 },
    1100: { slidesPerView: 3 },
  },
});

/*Projects Filter*/
const liItem = document.querySelectorAll(".fitler-src button"),
  imgItem = document.querySelectorAll(".projectsImages img ");
liItem.forEach((e) => {
  e.onclick = function () {
    liItem.forEach((e) => {
      e.className = "";
    }),
      (e.className = "active");
    let r = e.textContent;
    imgItem.forEach((e) => {
      (e.style.display = "none"),
        (e.getAttribute("data-filter") == r.toLowerCase() || "All" == r) &&
          (e.style.display = "block");
    });
  };
});
/*Image Pop-up*/
const popimage = [...document.querySelectorAll(".pop-image")],
  indexCount = document.querySelector(".index-wrapper h3"),
  popup = document.querySelector(".popup-image"),
  closeWrap = document.querySelector(".close-wrapper"),
  circleOne = document.querySelector(".circle"),
  circleTwo = document.querySelector(".circle2"),
  largeImage = document.querySelector(".large-image"),
  largeImagetwo = document.querySelector(".large-imagetwo"),
  largeImagethree = document.querySelector(".large-imagethree"),
  largeImagefour = document.querySelector(".large-imagefour"),
  largeImagefive = document.querySelector(".large-imagefive"),
  updateImage = (e) => {
    if ((path = largeImage)) {
      let r = `images/CarpentrypageImages/carpproject${e + 1}.jpg`;
      (largeImage.src = r), (indexCount.innerHTML = `${e + 1}/10`), (index = e);
    } else if ((path = largeImagetwo)) {
      let o = `images/ConcretepageImages/concproj${e + 1}.webp`;
      (largeImagetwo.src = o),
        (indexCount.innerHTML = `${e + 1}/6`),
        (index = e);
    } else if ((path = largeImagethree)) {
      let t = `images/Morepageimages/moreprojimg${e + 1}.webp`;
      (largeImagethree.src = t),
        (indexCount.innerHTML = `${e + 1}/10`),
        (index = e);
    } else if ((path = largeImagefour)) {
      let i = `images/GutterspageImages/guttersproj${e + 1}.jpg`;
      (largeImagefour.src = i),
        (indexCount.innerHTML = `${e + 1}/11`),
        (index = e);
    } else if ((path = largeImagefive)) {
      let a = `images/Filtersectionimages/filter${e + 1}.webp`;
      (largeImagefive.src = a),
        (indexCount.innerHTML = `${e + 1}/24`),
        (index = e);
    }
  };
popimage.forEach((e, r) => {
  e.addEventListener("click", () => {
    updateImage(r), popup.classList.toggle("active");
  });
}),
  circleOne &&
    circleOne.addEventListener("click", () => {
      index < popimage.length - 1 && updateImage(index + 1);
    }),
  circleTwo &&
    circleTwo.addEventListener("click", () => {
      index > 0 && updateImage(index - 1);
    }),
  closeWrap &&
    closeWrap.addEventListener("click", () => {
      popup.classList.toggle("active");
    });
    /*FORM*/
let popupform = document.getElementById("confirmation-form"),
  popupformfaulty = document.getElementById("confirmation-faulty"),
  numbercheck = document.getElementById("telephone-number"),
  regex = /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/;
function closePopup() {
  popupform.classList.remove("open-confirmation"),
    popupformfaulty.classList.remove("open-confirmation");
}
var form = document.getElementById("my-form");
async function handleSubmit(e) {
  e.preventDefault();
  var r = new FormData(e.target);
  fetch(e.target.action, {
    method: form.method,
    body: r,
    headers: { Accept: "application/json" },
  })
    .then((e) => {
      e.ok
        ? (popupform.classList.add("open-confirmation"), form.reset())
        : e.json().then((e) => {
            Object.hasOwn(e, "errors")
              ? popupformfaulty.classList.add("open-confirmation")
              : numbercheck != regex &&
                popupformfaulty.classList.add("open-confirmation");
          });
    })
    .catch((e) => {});
}
form.addEventListener("submit", handleSubmit);