2011-05-11 19 views
6

He creado un polígono en el que se puede hacer clic y lo he adjuntado al mapa. Tengo 'crosshair' draggableCursor configurado para el mapa. Sería bueno tener el mismo cursor para el polígono también. Sin embargo, cuando estoy sobre el polígono, el cursor cambia a una mano.Cursor personalizado sobre el polígono en el que se puede hacer clic en Google Maps V3

La única manera de mantener el cursor igual es establecer la opción de hacer clic: falso para el polígono, pero que hace que todos los detectores de eventos del polígono no funcionen.

He gastado la mitad y estamos tratando de encontrar una solución en la web, pero hemos fallado. ¿Alguien posee tal gema de conocimiento?

+0

¿Cómo sabrán los usuarios de su mapa que se puede hacer clic en el polígono si el cursor no cambia? – plexer

+1

Esa es la cuestión de UI y UX. La mayoría de los polígonos se pueden cliquear de manera predeterminada, la razón para hacer clic es señalar la ubicación precisa en el mapa, y hay soporte de resaltado, por lo que el cursor de mano es malo aquí. – savenkov

+0

Esta pregunta ya es bastante antigua, pero estoy teniendo el mismo problema y estoy buscando soluciones. ¿Encontró una que fuera amigable con la producción? La mejor solución que se me ocurre sería dibujar un polígono que no se pueda hacer clic cuando necesito cambiar el cursor y, si no, hacer clic en uno. Innecesariamente complejo, pero creo que funcionaría para mi situación. –

Respuesta

2

Después de pensarlo un poco, he encontrado muy hacky estrategia para hacer esto. Incluyo esto por curiosidad académica, pero no recomendaría implementarlo en un sitio de producción.

En pseudo-código:

onPolygonMouseover: 
    setTimeout(0 ms) 

onTimeout: 
    Find all elements in the dom with cursor == pointer 
    Set pointer to crosshair 

jQuery podría ser útil para encontrar todos los elementos con el cursor == puntero. Alternativamente, podría iterar sobre todo el DOM.

¿Por qué el tiempo de espera?

El tiempo de espera se debe a que no estoy seguro del orden en que la API expone los eventos. Si su evento se procesa antes que los eventos internos de la API, su código podría sobrescribirse con código interno.

¿Por qué un tiempo de espera de 0?

Un tiempo de espera de 0 empuja el código en la pila de ejecución de JS. Se ejecutará la próxima vez que haya un "corte" en la ejecución del código. Esto debería ser una vez que todo el código de procesamiento del evento haya finalizado.

+0

¡Gracias! Trataré de disfrutar la búsqueda de una solución de trabajo, pero estoy de acuerdo sobre la aplicabilidad en la producción :-) – savenkov

Cuestiones relacionadas