Yaky's

blog | notes | apps

JavaScript click-to-zoom function

Simple JavaScript function to enable click-to-zoom on all images on the page. Written as a solution for WISYWIG site editors without this feature and/or pages that have high-res images squashed to small size.

<script defer>
function viewFullscreenImage(img_src) {
	// Semi-transparent background for the fullscreen image
	let fsi_bg = document.createElement('div');
	fsi_bg.style = 'z-index: 99999; background-color: #000000c0; position: fixed; left: 0; top: 0; width: 100vw; height: 100vh;';
	fsi_bg.onclick = function() { fsi_bg.remove(); }; // Close when user clicks anywhere on the fullscreen image
	// Image
	let fsi_img = document.createElement('img');
	fsi_img.src = img_src;
	fsi_img.style = 'position: fixed; box-sizing: border-box; max-width: 100vw; max-height: 100vh; margin: auto; top: 0; bottom: 0; left:0; right: 0; padding: 16px';
	// Close button
	let fsi_close = document.createElement('button');
	fsi_close.textContent = '×';
	fsi_close.style = 'cursor: pointer; position: fixed; top:0; right: 0; margin: 4px; padding: 0.1em 0.4em; border: 0; background-color: #000000; color: #ffffff; font-size: 32px'
	fsi_close.onclick = function() { fsi_bg.remove(); };
	// Compose the fullscreen view
	fsi_bg.append(fsi_img);
	fsi_bg.append(fsi_close);
	document.querySelector('body').append(fsi_bg);
}

const imgs = document.querySelectorAll('div.wsite-image img'); // Selector for which img tags should have this ability
for (const img of imgs) {
	img.onclick = function() { viewFullscreenImage(img.src) };
}
</script>