2012-06-08 11 views
5

he implementado pointer-events: none en un elemento de Raphael usando jQuery así:puntero-eventos: ninguna solución Raphael VML

var raphaelElement = Raphael.ellipse(x,y,w,h); 
$(raphaelElement.node).css({'pointer-events': 'none'}); 

Esto funciona bien, pero por supuesto en IE8, Raphael utiliza VML en lugar de SVG y esta solución falla .

¿Alguien tiene otra solución para hacer que un elemento de Raphael ignore los eventos esencialmente?

Respuesta

7

La única manera de hacer este trabajo para IE8 (y anterior) sería para coger realmente el caso, y en el controlador de eventos:

  1. ocultar el elemento (.style.display='none')
  2. usar el método elementFromPoint() para encontrar el siguiente elemento por debajo del 'receptor'
  3. re-create and fire the event on that element (véase también this)
  4. muestran el receptor de nuevo (.style.display='')

Este enfoque general (menos el paso 3) se ha utilizado durante más de 10 años en IE para permitir al usuario arrastrar un elemento directamente debajo del cursor y detectar el "mouseover" de posibles elementos de destino debajo.

+0

nice. muy. primera vez que compartí un enlace que no es mío :) –

+0

Estoy corriendo el mismo problema con Raphael y estoy probando su solución. Pero en IE8 elementFromPoint devuelve null en lugar del elemento subyacente. ¿Está roto el elementFromPoint de IE8? ¿Hay un woraround? – Fabian

+0

@Fabian Pregúntele esto como su propia pregunta junto con un caso de prueba suficientemente reproducible. – Phrogz