/* * main.js * functions to power my portfolio * Author: phga/teord * Date: 2019-10-18 * Version: 1.0 */ document.addEventListener("DOMContentLoaded", run); // global var to control the animation of the text var runTextAnimation = true; function run() { initialize(); } function initialize() { let welcome = document.getElementById("welcome"); let exhibit = document.getElementById("exhibition"); let notice = Array.from(document.getElementsByClassName("arrow")); let userAgent = window.navigator.userAgent; flyingText(welcome); document.addEventListener("click", (e) => { let overlay = document.getElementById("info-box"); let curr = e.target; if (curr.className === "thumb") { runTextAnimation = false; hideElement(welcome); handleThumb(overlay, curr); } else if (curr.id === "btn-close") { runTextAnimation = true; flyingText(welcome); hideElement(overlay); } }); // Handle dummy dum dum Apple products >: if (userAgent.match(/iPad/i) || userAgent.match(/iPhone/i)) { exhibit.addEventListener("scroll", (e) => { e.preventDefault(); }); let startpos; exhibit.addEventListener("touchmove", (e) => { e.preventDefault(); }); exhibit.addEventListener("touchstart", (e) => { startpos = e.touches[0].clientX; }); exhibit.addEventListener("touchend", (e) => { let slide = startpos - e.changedTouches[0].clientX; if (slide < -5 || slide > 5 ) { doSlide(exhibit, slide); } }); } else { // remove the indicator on enter exhibit.addEventListener("mouseenter", () => { notice[0].remove(); notice[1].remove(); }, {once: true}); } } function doSlide(elem, dist) { console.log(dist); let hM = elem.scrollHeight; let sT = elem.scrollTop; if (dist < 0) elem.scrollTop = (sT + dist > 0) ? sT + dist : 0; else elem.scrollTop = (sT + dist > hM) ? hM : sT + dist; } function handleThumb(overlay, elem) { let imgName = elem.dataset.img; showOverlay(overlay, imgName); } // save last eventlistener func to remove it... var resize; function showOverlay(overlay, imgName) { let info = getInfoForImg(imgName); let magni = document.getElementById("zoom"); let infoTable = document.getElementById("img-description"); let img = document.createElement("img"); // call my zoom function (zoom.js) // fix for the zoom factor after resize (timeout to reduce calls) let waitResize; // remove for old img_names (named func required) window.removeEventListener("resize", resize); resize = () => { clearTimeout(waitResize); waitResize = setTimeout(() => {zoom(0.4, imgName)},50); }; window.addEventListener("resize", resize); img.addEventListener("load", () => {zoom(0.4, imgName)}); img.src = `/inc/images/${imgName}.jpg`; img.id = imgName; img.alt = imgName; magni.innerHTML = ""; magni.appendChild(img); infoTable.innerHTML = ` Author:${info.author} Size:${info.size} Tools:${info.tools} Date:${info.date} Description: ${info.desc} Read more... `; overlay.classList.remove("hidden"); } function hideElement(elem) { elem.classList.add("hidden"); } // Get info from server function getInfoForImg(imgName) { let info = {author: "Philip Gaber", size: "1920x1080 @24MP", tools: "Sony a5100", date: "2019-10-10", desc: "A couple words about the piece of art. I like trees, I am groot, Winter is coming!!!", price: "2999,99 €", blog: "./blog/some/url"}; return info; }