2011-07-05 13 views
20

Tengo el siguiente código HTML que no puedo ir a trabajar del todo bien en todos los navegadores:cursor no cambia a puntero en el caso usemap/área

<div id ="right_header">  
     <img id = "usemapsignin" src="/images/sign-in-panel-wo-FB.png" usemap = "#signin"> 
</div>  
     <map name = "signin" > 
      <area shape = "rect" coords = "30,10, 150, 50" target = "_blank" alt = "signin" id="signin" 
        onMouseOver="document.images['usemapsignin'].style.cursor='pointer'" 
      onMouseOut="document.images['usemapsignin'].style.cursor='auto'"/> 
      <area shape = "rect" coords = "0,113, 172, 150" target = "_blank" alt = "restowner" id = "restowner" 
       onclick = "alert('Hello Restaurant Owner!')" /> 
     </map> 

Estoy intentando cambiar el cursor de puntero cuando se mueve sobre una parte del mapa de uso. Pero no funciona en Chrome/Safari.

Cualquier ayuda será apreciada.

Respuesta

35

Chrome y Safari no son compatibles con el cambio de CSS de los elementos de mapa o área. La única forma sencilla de obtener una MousePointer en un área es tener:

<area ... href="javascript:void(0);" /> 
+0

¡Perfecto! Gracias –

4

IE no admite el cambio del cursor en el área de la etiqueta.

Lo que tienes que hacer es engañar con JS.

<img id="someimage" scr="images/image.jpg" usemap="#myareamap" /> 

<map name="myareamap"> 
    <area shape="poly" alt="test" title="test" coords="0,0, 50,50, 50,100, 0,100, 0,0" onmouseover="changeimage('someimage', 'newimagesrc')" /> 
</map> 

esto es en su Javascript

function changeimage(id, imagesrc){ 
    document.getElementById(id).src = imagsrc; 
    if (imagesrc = "images/image.jpg"){ 
     document.getElementById(id).style.cursor = "default"; 
    } else { 
     document.getElementById(id).style.cursor = "pointer"; 
    } 
} 

Esto hará dos cosas:

  • le permitirá cambiar fácilmente la imagen basándose en el mapa de imágenes que desplazarse más.
  • le dará la ilusión de que sólo la parte de la areamap scolled sobre cambia el cursor.
+1

pero desea cambiar el cursor solo en el área, no en toda la imagen. – Jirapong

+0

Es la mejor respuesta para mí. Cuando el mouse sale del área, entonces el cursor ya no es más puntero y cuando está suspendido, entonces está. Esa es una solución muy simple e inteligente, no tengo ningún error. – ivkremer

10

Esto debería funcionar en IE, Firefox, Chrome y Safari.

<img id="img_id" src="image.gif" border="0" usemap="#map4" /> 
<map id ="map4" name="map4"> 
    <area shape ="poly" coords="5, 0, 100, 10, 94, 66, 0, 50" 
      href="javascript:void(0);" 
      onmouseover="document.getElementById('img_id').style.cursor='pointer';" 
      onmouseout="document.getElementById('img_id').style.cursor='';"> 
</map> 
+0

Funcionando bien en IE. en Chrome: debe usar la respuesta @elDuderino. Estoy utilizando twise – inon

+2

Esta debería ser la respuesta aceptada, funciona bien en la última versión de cromo – Kira

2

Tuve un problema similar. La solución fue agregar el atributo href="#" al área en lugar de hacer un hack de CSS.

+0

Esto funcionó para mí para IE –

20

Todas estas soluciones son hacks que no funcionan bien (para mí no funcionaron en absoluto). Después de mucho mirar y reflexionar, determiné que el problema es que el navegador simplemente no sabe cómo representar el elemento de área, por lo tanto, no se puede diseñar. Si está utilizando elementos HTML5, debe estar familiarizado con este desafío. Entonces fue cuando se apagó la bombilla ..

Para evitar esto, simplemente configure la etiqueta de área como un elemento de nivel de bloque. Luego puedes darle estilo según sea necesario. Funcionó muy bien para mí:

area { 
    display: block; 
    cursor: pointer; 
} 
+0

Welp, esto no funcionará en IE (vaya figura) .. Voy a actualizar mi solución cuando Puedo dar la vuelta para dirigirme a nuestro viejo amigo IE. – elDuderino

+0

Nice - Webkit ordenado sin JS - iE, ¿a quién le importa más? – T4NK3R

+0

Para mí, Safari parecía mostrar el cursor del puntero que realmente necesitaba mostrar: bloque – dijipiji

1

¡Encontré una gran solución usando Jquery!

$('area').hover(function(){ 
    //Set your cursor to whatever 
    $('body').css('cursor', 'help'); 
}, function() { 
    //set your cursor back to default 
    $('body').css('cursor', 'initial'); 
}) 
Cuestiones relacionadas