164 lines
6.7 KiB
JavaScript
Executable file
164 lines
6.7 KiB
JavaScript
Executable file
//navbar
|
|
const menuBtn = document.querySelector(".menu-btn");
|
|
const navi = document.querySelector(".nav");
|
|
|
|
menuBtn.addEventListener("click", ()=>{
|
|
menuBtn.classList.toggle("active");
|
|
navi.classList.toggle("active");
|
|
});
|
|
|
|
//video
|
|
const videoBtn = document.querySelectorAll(".nav-btn");
|
|
const slides = document.querySelectorAll(".video-slide");
|
|
const contents = document.querySelectorAll(".content");
|
|
|
|
var sliderNav = function(manual){
|
|
videoBtn.forEach((btn)=>{
|
|
btn.classList.remove("active");
|
|
});
|
|
|
|
slides.forEach((slide)=>{
|
|
slide.classList.remove("active");
|
|
});
|
|
contents.forEach((content)=>{
|
|
content.classList.remove("active");
|
|
});
|
|
|
|
videoBtn[manual].classList.add("active");
|
|
slides[manual].classList.add("active");
|
|
contents[manual].classList.add("active");
|
|
}
|
|
videoBtn.forEach((btn, i)=>{
|
|
btn.addEventListener("click", ()=>{
|
|
sliderNav(i);
|
|
});
|
|
});
|
|
|
|
//carousel
|
|
const carousel = document.querySelector(".carousel"),
|
|
firstImg = carousel.querySelectorAll("img")[0],
|
|
arrowIcons = document.querySelectorAll(".wrapper i");
|
|
|
|
let isDragStart = false, isDragging = false, prevPageX, prevScrollLeft, positionDiff;
|
|
|
|
const showHideIcons = () => {
|
|
// showing and hiding prev/next icon according to carousel scroll left value
|
|
let scrollWidth = carousel.scrollWidth - carousel.clientWidth; // getting max scrollable width
|
|
arrowIcons[0].style.display = carousel.scrollLeft == 0 ? "none" : "block";
|
|
arrowIcons[1].style.display = carousel.scrollLeft == scrollWidth ? "none" : "block";
|
|
}
|
|
|
|
arrowIcons.forEach(icon => {
|
|
icon.addEventListener("click", () => {
|
|
let firstImgWidth = firstImg.clientWidth + 14; // getting first img width & adding 14 margin value
|
|
// if clicked icon is left, reduce width value from the carousel scroll left else add to it
|
|
carousel.scrollLeft += icon.id == "left" ? -firstImgWidth : firstImgWidth;
|
|
setTimeout(() => showHideIcons(), 60); // calling showHideIcons after 60ms
|
|
});
|
|
});
|
|
|
|
const autoSlide = () => {
|
|
// if there is no image left to scroll then return from here
|
|
if(carousel.scrollLeft - (carousel.scrollWidth - carousel.clientWidth) > -1 || carousel.scrollLeft <= 0) return;
|
|
|
|
positionDiff = Math.abs(positionDiff); // making positionDiff value to positive
|
|
let firstImgWidth = firstImg.clientWidth + 14;
|
|
// getting difference value that needs to add or reduce from carousel left to take middle img center
|
|
let valDifference = firstImgWidth - positionDiff;
|
|
|
|
if(carousel.scrollLeft > prevScrollLeft) { // if user is scrolling to the right
|
|
return carousel.scrollLeft += positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff;
|
|
}
|
|
// if user is scrolling to the left
|
|
carousel.scrollLeft -= positionDiff > firstImgWidth / 3 ? valDifference : -positionDiff;
|
|
}
|
|
|
|
const dragStart = (e) => {
|
|
// updatating global variables value on mouse down event
|
|
isDragStart = true;
|
|
prevPageX = e.pageX || e.touches[0].pageX;
|
|
prevScrollLeft = carousel.scrollLeft;
|
|
}
|
|
|
|
const dragging = (e) => {
|
|
// scrolling images/carousel to left according to mouse pointer
|
|
if(!isDragStart) return;
|
|
e.preventDefault();
|
|
isDragging = true;
|
|
carousel.classList.add("dragging");
|
|
positionDiff = (e.pageX || e.touches[0].pageX) - prevPageX;
|
|
carousel.scrollLeft = prevScrollLeft - positionDiff;
|
|
showHideIcons();
|
|
}
|
|
|
|
const dragStop = () => {
|
|
isDragStart = false;
|
|
carousel.classList.remove("dragging");
|
|
|
|
if(!isDragging) return;
|
|
isDragging = false;
|
|
autoSlide();
|
|
}
|
|
|
|
carousel.addEventListener("mousedown", dragStart);
|
|
carousel.addEventListener("touchstart", dragStart);
|
|
|
|
document.addEventListener("mousemove", dragging);
|
|
carousel.addEventListener("touchmove", dragging);
|
|
|
|
document.addEventListener("mouseup", dragStop);
|
|
carousel.addEventListener("touchend", dragStop);
|
|
|
|
//gallery-tab
|
|
//selecting all required elements
|
|
const filterItem = document.querySelector(".gallery-items");
|
|
const filterImg = document.querySelectorAll(".gallery .image-gal");
|
|
|
|
window.onload = ()=>{ //after window loaded
|
|
filterItem.onclick = (selectedItem)=>{ //if user click on filterItem div
|
|
if(selectedItem.target.classList.contains("item-gallery")){ //if user selected item has .item class
|
|
filterItem.querySelector(".active").classList.remove("active"); //remove the active class which is in first item
|
|
selectedItem.target.classList.add("active"); //add that active class on user selected item
|
|
let filterName = selectedItem.target.getAttribute("data-name"); //getting data-name value of user selected item and store in a filtername variable
|
|
filterImg.forEach((image) => {
|
|
let filterImges = image.getAttribute("data-name"); //getting image data-name value
|
|
//if user selected item data-name value is equal to images data-name value
|
|
//or user selected item data-name value is equal to "all"
|
|
if((filterImges == filterName) || (filterName == "all")){
|
|
image.classList.remove("hide"); //first remove the hide class from the image
|
|
image.classList.add("show"); //add show class in image
|
|
}else{
|
|
image.classList.add("hide"); //add hide class in image
|
|
image.classList.remove("show"); //remove show class from the image
|
|
}
|
|
});
|
|
}
|
|
}
|
|
for (let i = 0; i < filterImg.length; i++) {
|
|
filterImg[i].setAttribute("onclick", "preview(this)"); //adding onclick attribute in all available images
|
|
}
|
|
}
|
|
|
|
//fullscreen image preview function
|
|
//selecting all required elements
|
|
const previewBox = document.querySelector(".preview-box"),
|
|
categoryName = previewBox.querySelector(".title-gal p"),
|
|
previewImg = previewBox.querySelector("img"),
|
|
closeIcon = previewBox.querySelector(".icon-gal"),
|
|
shadow = document.querySelector(".shadow");
|
|
|
|
function preview(element){
|
|
//once user click on any image then remove the scroll bar of the body, so user can't scroll up or down
|
|
document.querySelector("body").style.overflow = "hidden";
|
|
let selectedPrevImg = element.querySelector("img").src; //getting user clicked image source link and stored in a variable
|
|
let selectedImgCategory = element.getAttribute("data-name"); //getting user clicked image data-name value
|
|
previewImg.src = selectedPrevImg; //passing the user clicked image source in preview image source
|
|
categoryName.textContent = selectedImgCategory; //passing user clicked data-name value in category name
|
|
previewBox.classList.add("show"); //show the preview image box
|
|
shadow.classList.add("show"); //show the light grey background
|
|
closeIcon.onclick = ()=>{ //if user click on close icon of preview box
|
|
previewBox.classList.remove("show"); //hide the preview box
|
|
shadow.classList.remove("show"); //hide the light grey background
|
|
document.querySelector("body").style.overflow = "auto"; //show the scroll bar on body
|
|
}
|
|
}
|