我正在尝试在窗口调整大小事件中调整图像映射的大小。我得到的最接近的是使用mouseclick事件,但是它需要根据我的工作调整窗口大小。我正在使用Firefox 3.5.5
我正在使用jquery。这是我的示例-我要在窗口调整大小时调整大小的区域按钮在左上方(单击以调整地图和区域按钮的大小):
http://www.whitebrickstudios.com/foghornstour/imagemap3.html
任何帮助将不胜感激!谢谢,丰富
我写了一些简单的函数来重建每个事件的所有地图点。试试这个
function mapRebuild(scaleValue) {
var map = $("#imgmap"); // select your map or for all map you can choose $("map").each(function() { map = $(this);.....})
map.find("area").each(function() { // select all areas
var coords = $(this).attr("coords"); // extract coords
coords = coords.split(","); // split to array
var scaledCoords = "";
for (var coord in coords) { // rebuild all coords with scaleValue
scaledCoords += Math.floor(coords[coord] * scaleValue) + ",";
}
scaledCoords = scaledCoords.slice(0, -1); // last coma delete
$(this).attr("coords", scaledCoords); // set new coords
});
}
scaleValue可以计算为oldWindowWidth / newWindowWidth。当然,您需要在调整窗口大小时保持oldWindowWidth的值。也许我的解决方案没有按时完成,但是我希望这对某人有用
我认为您想要的是http://home.comcast.net/~urbanjost/semaphore.html
在此处显示了有关如何在图像显示尺寸更改时如何更改图像地图坐标的其他示例。
这是一个旧线程,但是对于任何寻求类似或什至相同问题的解决方案的人,ImageMapster jQuery插件似乎提供了最简单的解决方案。您可以按照以下方式使用其调整大小的方法(如果需要,甚至可以设置调整大小的动画!)来调整图像及其图像映射的大小:
$('img').mapster( 'resize', newWidth, newHeight, resizeTime);
您可以在ImageMapster's demo页面上找到指向jsFiddle that demonstrates resizing图片及其地图的链接,以响应于更改浏览器窗口。
作为Viktor答案的修改版本,该版本可以处理多个调整大小。它存储初始值以与将来的任何调整大小进行比较。这也使用waitForFinalEvent,因此不会在调整大小时一遍又一遍。
var mapImg = $('#mapImg');
var naturalWidth = 1200; // set manually to avoid ie8 issues
var baseAreas = new Array();
var scaleValue = mapImg.width() / naturalWidth;
$(window).resize( function() {
waitForFinalEvent( function() {
scaleValue = mapImg.width() / naturalWidth;
mapRebuild( scaleValue );
}, 500, 'resize-window');
});
function mapRebuild( scaleValue ) {
var map = $("#imgMap");
var mapareas = map.find( 'area' );
if ( baseAreas.length == 0 ) {
mapareas.each( function() {
baseAreas.push( $(this).attr( 'coords' ) ); // set initial values
});
}
mapareas.each( function( index ) {
var coords = baseAreas[index]; // use the corresponding base coordinates
coords = coords.split( ',' );
var scaledCoords = '';
for ( var coord in coords ) {
scaledCoords += Math.floor( coords[coord] * scaleValue ) + ',';
}
scaledCoords = scaledCoords.slice( 0, -1 );
$(this).attr( 'coords', scaledCoords );
});
}
mapRebuild( scaleValue ); // initial scale
这里是不使用jQuery的解决方案。
首先,建立一个库函数:
var ImageMap = {
resize: function(coords, mapWidth) {
var areas = document.getElementsByTagName('area'),
imageWidth = document.querySelector("#map").clientWidth,
resize = imageWidth / mapWidth;
for (var i=0; i<coords.length; i++) {
var temp = coords[i].map(x=>Math.round(x*resize));
areas[i].coords = temp.join(',');
}
},
getCoords: function(){
var areas = document.getElementsByTagName('area'),
array = [];
for (var i=0; i<areas.length; i++) {
array.push(areas[i].coords.split(',').map(x=>+x));
}
return array;
}
};
然后,在页面最初被加载以及页面调整大小时,调用resize函数:
var coords = ImageMap.getCoords();
window.onload = function () {
ImageMap.resize(coords, 500);
}
window.onresize = function () {
ImageMap.resize(coords, 500);
}
用您的默认地图大小替换500
要在调整窗口大小时调用函数,请尝试以下操作:
$(window).bind('resize', function() {
// resize the button here
});
而且,第37行缺少美元符号:
scaleXY('theMap',(window).width());
应该是:
scaleXY('theMap',$(window).width());
如果只需要调整图像大小,请使用以下技术:http://www.cssplay.co.uk/layouts/background.html
感谢CSSPlay。