Line 29: | Line 29: | ||
#Top {display: block;} | #Top {display: block;} | ||
− | + | </style> | |
− | + | <script type="text/javascript"> | |
− | + | ||
− | <script | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
//Here I do the tabulator system! | //Here I do the tabulator system! | ||
function openIL(evt, ILName) { | function openIL(evt, ILName) { | ||
Line 58: | Line 46: | ||
} | } | ||
</script> | </script> | ||
+ | <script type="text/javascript"> | ||
+ | /*! Image Map Resizer | ||
+ | * Desc: Resize HTML imageMap to scaled image. | ||
+ | * Copyright: (c) 2014-15 David J. Bradshaw - dave@bradshaw.net | ||
+ | * License: MIT | ||
+ | */ | ||
+ | ;(function() { | ||
+ | 'use strict' | ||
+ | |||
+ | function scaleImageMap() { | ||
+ | function resizeMap() { | ||
+ | function resizeAreaTag(cachedAreaCoords, idx) { | ||
+ | function scale(coord) { | ||
+ | var dimension = 1 === (isWidth = 1 - isWidth) ? 'width' : 'height' | ||
+ | return ( | ||
+ | padding[dimension] + | ||
+ | Math.floor(Number(coord) * scalingFactor[dimension]) | ||
+ | ) | ||
+ | } | ||
+ | |||
+ | var isWidth = 0 | ||
+ | areas[idx].coords = cachedAreaCoords | ||
+ | .split(',') | ||
+ | .map(scale) | ||
+ | .join(',') | ||
+ | } | ||
+ | |||
+ | var scalingFactor = { | ||
+ | width: image.width / image.naturalWidth, | ||
+ | height: image.height / image.naturalHeight, | ||
+ | } | ||
+ | |||
+ | var padding = { | ||
+ | width: parseInt( | ||
+ | window.getComputedStyle(image, null).getPropertyValue('padding-left'), | ||
+ | 10 | ||
+ | ), | ||
+ | height: parseInt( | ||
+ | window.getComputedStyle(image, null).getPropertyValue('padding-top'), | ||
+ | 10 | ||
+ | ), | ||
+ | } | ||
+ | |||
+ | cachedAreaCoordsArray.forEach(resizeAreaTag) | ||
+ | } | ||
+ | |||
+ | function getCoords(e) { | ||
+ | //Normalize coord-string to csv format without any space chars | ||
+ | return e.coords.replace(/ *, */g, ',').replace(/ +/g, ',') | ||
+ | } | ||
+ | |||
+ | function debounce() { | ||
+ | clearTimeout(timer) | ||
+ | timer = setTimeout(resizeMap, 250) | ||
+ | } | ||
+ | |||
+ | function start() { | ||
+ | if ( | ||
+ | image.width !== image.naturalWidth || | ||
+ | image.height !== image.naturalHeight | ||
+ | ) { | ||
+ | resizeMap() | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function addEventListeners() { | ||
+ | image.addEventListener('load', resizeMap, false) //Detect late image loads in IE11 | ||
+ | window.addEventListener('focus', resizeMap, false) //Cope with window being resized whilst on another tab | ||
+ | window.addEventListener('resize', debounce, false) | ||
+ | window.addEventListener('readystatechange', resizeMap, false) | ||
+ | document.addEventListener('fullscreenchange', resizeMap, false) | ||
+ | } | ||
+ | |||
+ | function beenHere() { | ||
+ | return 'function' === typeof map._resize | ||
+ | } | ||
+ | |||
+ | function getImg(name) { | ||
+ | return document.querySelector('img[usemap="' + name + '"]') | ||
+ | } | ||
+ | |||
+ | function setup() { | ||
+ | areas = map.getElementsByTagName('area') | ||
+ | cachedAreaCoordsArray = Array.prototype.map.call(areas, getCoords) | ||
+ | image = getImg('#' + map.name) || getImg(map.name) | ||
+ | map._resize = resizeMap //Bind resize method to HTML map element | ||
+ | } | ||
+ | |||
+ | var /*jshint validthis:true */ | ||
+ | map = this, | ||
+ | areas = null, | ||
+ | cachedAreaCoordsArray = null, | ||
+ | image = null, | ||
+ | timer = null | ||
+ | |||
+ | if (!beenHere()) { | ||
+ | setup() | ||
+ | addEventListeners() | ||
+ | start() | ||
+ | } else { | ||
+ | map._resize() //Already setup, so just resize map | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function factory() { | ||
+ | function chkMap(element) { | ||
+ | if (!element.tagName) { | ||
+ | throw new TypeError('Object is not a valid DOM element') | ||
+ | } else if ('MAP' !== element.tagName.toUpperCase()) { | ||
+ | throw new TypeError( | ||
+ | 'Expected <MAP> tag, found <' + element.tagName + '>.' | ||
+ | ) | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function init(element) { | ||
+ | if (element) { | ||
+ | chkMap(element) | ||
+ | scaleImageMap.call(element) | ||
+ | maps.push(element) | ||
+ | } | ||
+ | } | ||
+ | |||
+ | var maps | ||
+ | |||
+ | return function imageMapResizeF(target) { | ||
+ | maps = [] // Only return maps from this call | ||
+ | |||
+ | switch (typeof target) { | ||
+ | case 'undefined': | ||
+ | case 'string': | ||
+ | Array.prototype.forEach.call( | ||
+ | document.querySelectorAll(target || 'map'), | ||
+ | init | ||
+ | ) | ||
+ | break | ||
+ | case 'object': | ||
+ | init(target) | ||
+ | break | ||
+ | default: | ||
+ | throw new TypeError('Unexpected data type (' + typeof target + ').') | ||
+ | } | ||
+ | |||
+ | return maps | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if (typeof define === 'function' && define.amd) { | ||
+ | define([], factory) | ||
+ | } else if (typeof module === 'object' && typeof module.exports === 'object') { | ||
+ | module.exports = factory() //Node for browserfy | ||
+ | } else { | ||
+ | window.imageMapResize = factory() | ||
+ | } | ||
+ | |||
+ | if ('jQuery' in window) { | ||
+ | window.jQuery.fn.imageMapResize = function $imageMapResizeF() { | ||
+ | return this.filter('map') | ||
+ | .each(scaleImageMap) | ||
+ | .end() | ||
+ | } | ||
+ | } | ||
+ | })() | ||
+ | </script> | ||
+ | </head> | ||
+ | <body> | ||
<!-- ok cool here starts the image --> | <!-- ok cool here starts the image --> | ||
<div class="picture"> | <div class="picture"> | ||
Line 113: | Line 267: | ||
</div> | </div> | ||
</div> | </div> | ||
− | + | <script>imageMapResize();</script> | |
</body> | </body> | ||
</html> | </html> |
Revision as of 21:40, 8 November 2020