これは単純な HTML/CSS 操作では実行できないため、JavaScript を使用して画像のサイズ変更に基づいて座標を効果的に再計算するしかありません。この目的のために、この目的を達成する関数をまとめました (ただし、2 つの関数が関係しています)。
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 フィドルのデモ。
ただし、これには を実装するブラウザーが必要であることに注意してくださいwindow.getComputedStyle()
(ほとんどの最新のブラウザーですが、バージョン 9 以降の IE のみ)。また、必要な引数が関数に渡されることを確認する以外に、健全性チェックはありません。ただし、実験する場合は、これらを開始する必要があります。
参考文献: