Poiché ciò non può essere eseguito con una semplice manipolazione HTML/CSS, l'unica alternativa è JavaScript, in modo efficace, ricalcolare le coordinate in base al ridimensionamento dell'immagine. A tal fine ho messo insieme una funzione (anche se ci sono due funzioni coinvolte) che raggiunge questo scopo:
function findSizes(el, src) {
if (!el || !src) {
return false;
}
else {
var wGCS = window.getComputedStyle,
pI = parseInt,
dimensions = {};
dimensions.actualWidth = pI(wGCS(el, null).width.replace('px', ''), 10);
var newImg = document.createElement('img');
newImg.src = src;
newImg.style.position = 'absolute';
newImg.style.left = '-10000px';
document.body.appendChild(newImg);
dimensions.originalWidth = newImg.width;
document.body.removeChild(newImg);
return dimensions;
}
}
function remap(imgElem) {
if (!imgElem) {
return false;
}
else {
var mapName = imgElem
.getAttribute('usemap')
.substring(1),
map = document.getElementsByName(mapName)[0],
areas = map.getElementsByTagName('area'),
imgSrc = imgElem.src,
sizes = findSizes(imgElem, imgSrc),
currentWidth = sizes.actualWidth,
originalWidth = sizes.originalWidth,
multiplier = currentWidth/originalWidth,
newCoords;
for (var i = 0, len = areas.length; i < len; i++) {
newCoords = areas[i]
.getAttribute('coords')
.replace(/(\d+)/g,function(a){
return Math.round(a * multiplier);
});
areas[i].setAttribute('coords',newCoords);
}
}
}
var imgElement = document.getElementsByTagName('img')[0];
remap(imgElement);
JS Fiddle demo.
Si prega di notare, tuttavia, che questo richiede un browser che implementa window.getComputedStyle()
(la maggior parte dei browser correnti, ma solo in IE dalla versione 9 e successive). Inoltre, non ci sono controlli di integrità oltre a garantire che gli argomenti richiesti siano passati nelle funzioni. Questi dovrebbero, tuttavia, essere un inizio se si vuole sperimentare.
Riferimenti:
fonte
2012-07-06 18:21:16
le immagini hanno dimensioni definite, perché utilizzare la percentuale? partendo dal presupposto che non stai allungando le immagini per riempire lo schermo (che è considerato una cattiva pratica). –
Le mie immagini si allungheranno definitivamente per adattarsi all'intero browser della finestra. E se gestisci le tue immagini con attenzione (fornendo ad esempio versioni diverse usando le query multimediali o altre tecniche), allora non è una cattiva pratica. –
beh, se assegni un'immagine diversa per ogni dimensione dello schermo, dovresti essere in grado di utilizzare dimensioni fisse per l'area della mappa. vedere la risposta di @ Baszz. –