2009-11-30 28 views
6

Estoy tratando de cambiar el tamaño de un mapa de imagen en el evento de cambio de tamaño de la ventana. Lo más cercano que he conseguido es usar un evento de clic de mouse, pero tiene que ser de tamaño de ventana para lo que estoy haciendo. Estoy usando Firefox 3.5.5Cambiar el tamaño del mapa de imagen en el tamaño de la ventana

Estoy usando algo de jquery. Aquí está mi ejemplo - el botón zona Quiero cambiar el tamaño de cambiar el tamaño de la ventana se encuentra en la parte superior izquierda (clic en él para cambiar el tamaño de mapa y área de botones):

http://www.whitebrickstudios.com/foghornstour/imagemap3.html

Cualquier ayuda se agradece! Gracias, Rich

+0

Tiene un error tipográfico en 'imageMapResize' quizás. Usted dice 'scaleXY ('theMap'' cuando creo que usted quiso decir' scaleXY (' myimage''? –

+0

https://github.com/davidjbradshaw/image-map-resizer – Blazemonger

Respuesta

-1

Para llamar a una función cuando se cambia el tamaño de la ventana, pruebe lo siguiente:

$(window).bind('resize', function() { 
    // resize the button here 
}); 

Además, la línea 37 le falta un signo de dólar:

scaleXY('theMap',(window).width()); 

Debería ser:

scaleXY('theMap',$(window).width()); 
+2

) Aunque usted dice la verdad, el OP ya está haciendo esto si te molestaste en leer el código. –

+0

Así que funciona, pero tengo que cambiar el tamaño de Firefox 6 veces para que funcione. IE es un desastre. Hice esos cambios. Esto es útil, pero parece que Firefox y especialmente IE están teniendo demasiados problemas para cambiar el tamaño. Estoy pensando que voy a seguir con mi plan original y solo usar divs con posicionamiento semi-preciso para tomar el lugar de los botones del mapa de imagen. Maldita sea. Sin embargo, voy a pensar en esto y si alguna vez se me ocurre y respondo lo publicaré. Gracias por su ayuda chicos. – Kozy

+0

aquí está el enlace: http://www.whitebrickstudios.com/foghornstour/imagemap3.html – Kozy

-1

Si solo tiene que cambiar el tamaño del im edad, utilice esta técnica: http://www.cssplay.co.uk/layouts/background.html

Gracias a CSSPlay.

+2

Creo que te estás perdiendo el punto danigb. Estoy buscando cambiar el tamaño de un 'área de mapa de imagen', en el tamaño de la ventana. – Kozy

+0

Ahora entiendo. De hecho, abrí tu url y no funcionó para mí (Chrome). Tuve que hacer algo similar y terminé usando divs en lugar de imagemaps y estableciendo la posición: absolute; y arriba, izquierda, ancho y alto en% unidades. Si lo que puedo explicar un poco más. vítores dani – danigb

+0

Hola Danigb, terminé usando divs también para posicionar imágenes con% s. Aunque aún sería bueno usar mapas de imágenes en una versión futura. Esto es lo que tengo para los mapas de imágenes hasta ahora. http://home.comcast.net/~urbanjost/IMG/resizeimg4.html – Kozy

1

Creo que lo que desea se encuentra en http://home.comcast.net/~urbanjost/semaphore.html

donde muestro diferentes ejemplos de cómo hacer su mapa de imagen coordina el cambio cuando la imagen cambia el tamaño de pantalla.

+0

En realidad, incorporé algunos de el código en esos ejemplos. Sin embargo, el problema con el que me topé fue que aunque el mapa de la imagen cambiaría de tamaño para eventos como 'clic', no se ajustaría en el evento 'cambio de tamaño de ventana'. Bueno, sí, solo tienes que cambiar el tamaño del navegador 6 veces para obtener para que funcione Estoy usando FF 3.5 En este momento mi enlace fue a la quiebra, ha resuelto ahora: http://www.whitebrickstudios.com/foghornstour/imagemap3.html he optado por usar divs posicionados por% s pero' Será realmente genial hacer que esto funcione algún día. – Kozy

1

Este es un hilo antiguo pero para cualquiera que busque una solución para un problema similar o incluso idéntico, el plugin jQuery ImageMapster parece proporcionar la solución más fácil. Puede utilizar su método de cambio de tamaño (que incluso puede animar el cambio de tamaño, si lo desea!) De la siguiente manera para cambiar el tamaño de una imagen junto con su mapa de imagen:

$('img').mapster('resize', newWidth, newHeight, resizeTime); 

puede encontrar un enlace en ImageMapster's demo página a un jsFiddle that demonstrates resizing una imagen & su mapa en respuesta a cambiar la ventana del navegador.

3

Escribí alguna función simple para reconstruir todos los puntos del mapa en cada evento. Pruebe esto

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 se puede calcular como oldWindowWidth/newWindowWidth. Por supuesto, debe mantener el valor de oldWindowWidth en el tamaño de la ventana. Tal vez mi solución no sea a tiempo, pero espero que esto sea útil para alguien

+1

+1 Estoy usando esta función, funciona como un encanto. Pero utilicé 'img.width/img.naturalWidth' en lugar de usar el ancho de la ventana. De esa manera no tuve que tomar en cuenta fronteras, márgenes, rellenos, etc. adicionales. –

+1

He expandido esto en un poco de lib, que mantiene el mapa funcionando a medida que la imagen cambia de tamaño y también hace frente a X e Y que tienen diferentes escalas. También resuelve los valores de escala para usted. https://github.com/davidjbradshaw/imagemap-resizer –

0

Como versión modificada de la respuesta de Viktor, esta versión puede manejar múltiples tamaños. Almacena valores iniciales para comparar con cualquier cambio de tamaño futuro. Esto también usa waitForFinalEvent para que no se ejecute una y otra vez al cambiar el tamaño.



    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 

Cuestiones relacionadas