let showcase = $("#img-big"); let showcaseButton = $("#photo-buttons"); let showcaseLink = $("#img_big_link"); let showcaseDownload = $("#img_big_download"); let photoOverlay = $("#photo-overlay"); let headerTop = $("#header-top"); let sideNav = $("#menuSidenav"); let loading = $("#loading"); $(document).ready( function () { showcase.bind("mousewheel", function(event, delta) { let min_width = $(window).width() / 5; let min_height = $(window).height() / 5; let max_width = $(window).width() * 5; let max_height = $(window).height() * 5; let scale = 150 / 100; if (delta < 0) scale = 1/scale; let cursorY = event.pageY - $(window).scrollTop(); let offsetX = event.pageX - (showcase.position().left + showcase.width()/2); let offsetY = cursorY - (showcase.position().top + showcase.height()/2); let new_width = showcase.width() * scale; let new_height = showcase.height() * scale; if (new_width > max_width || new_width < min_width) new_width = 0; if (new_height > max_height || new_height < min_height) new_height = 0; if (new_width !== 0 && new_height !== 0){ let new_left = event.pageX - (offsetX * scale); let new_top = cursorY - (offsetY * scale); showcase.width(new_width); showcase.height(new_height); if (new_height > $(window).height() || new_width > $(window).width()){ showcase.css('left', new_left +'px'); showcase.css('top', new_top +'px'); } else{ showcase.css('left', $(window).width()/2 +'px'); showcase.css('top', $(window).height()/2 +'px'); } } return false; }); } ); /* * Display selected image in showcase * When clicked, display image in full size */ function displayBig(elem) { changeImage($(elem).attr('src')); hideTopBar(); disableFullscreen(); photoOverlay.fadeIn(500); } function getSourceFromThumbnail(source) { return source.replace("photos_thumb/", "photos/"); } /* * Hide showcase image */ function closeBig() { showTopBar(); disableFullscreen(); photoOverlay.fadeOut(500); } /* * Toggle display of buttons/header */ function toggleFullscreen() { if (showcaseButton.css("display") === "none") disableFullscreen(); else enableFullscreen(); } function enableFullscreen() { showcaseButton.fadeOut(500); } function disableFullscreen() { showcaseButton.fadeIn(500); } function hideTopBar() { headerTop.fadeOut(500); sideNav.fadeOut(500); } function showTopBar() { headerTop.fadeIn(500); sideNav.fadeIn(500); } $(document).ready(function () { document.getElementById("photos_title").scrollIntoView(); }); /* * Control images with keyboard arrows */ $(document).keydown(function (e) { switch (e.which) { case 37: // left displayNext(-1); break; case 39: // right displayNext(1); break; default: return; // exit this handler for other keys } e.preventDefault(); // prevent the default action (scroll / move caret) }); /* * Control images with swipes */ var img = document.querySelector('#photo_overlay'); // Create a manager to manager the element var manager = new Hammer.Manager(img); // Create a recognizer var Swipe = new Hammer.Swipe(); // Add the recognizer to the manager manager.add(Swipe); // Subscribe to the swipe event manager.on('swipe', function (e) { var direction = e.offsetDirection; if (direction === 4) { // right displayNext(-1); } else if (direction === 2) { // left displayNext(1); } }); /* * Display next/last image in showcase. When reaching end/start, loop back to start/end */ function displayNext(direction) { var currentSrc = showcase.attr('src'); var photos = document.getElementsByClassName("photo"); var current = 0; for (var i = 0; i < photos.length; i++) { if (getSourceFromThumbnail($(photos[i]).attr('src')) === currentSrc) { current = i; } } var next = current + direction; var nextId = ""; if (direction > 0) { nextId = "#photo-0"; } else { nextId = "#photo-" + (photos.length - 1); } if (document.getElementById("photo-" + next) != null) { nextId = "#photo-" + next; } var nextSrc = $(nextId).attr('src'); changeImage(nextSrc); } /* * Change image source, link and download */ function changeImage(thumb) { displayLoading(); showcase.on('load', function () { hideLoading(); }); var source = getSourceFromThumbnail(thumb); showcase.attr("src", source); showcase.css({ width: 'auto', height: '90%' }); showcaseLink.attr("href", source); showcaseDownload.attr("href", source); } function displayLoading() { loading.show(); } function hideLoading() { loading.fadeOut(200); }