5

Mis elementos canvas completamente posicionados están bloqueando todos los eventos del mouse para que no se pueda hacer clic en nada debajo, el mismo problema mencionado here y here.IE9 Eventos de mouse hacia adelante a través de un elemento canvas enmascarado

Tengo varias capas de lienzo que deben estar en un índice Z específico, así que necesito reenviar los eventos del mouse a través de los lienzos. pointer-events: none; obras en buenas navegadores, pero para IE9 que necesitan javascript para hacerlo, aquí está mi solución actual,

var evts = [ 'click', 'mousedown', 'mouseup', 'dblclick'], 
       canvases = $('canvas'); 

      $.each(evts, function(_, event){ 
       canvases.bind(event, function(evt){ 
        var target, 
         pEvent; 
        $(this).hide(); 
        target = document.elementFromPoint(evt.clientX, evt.clientY); 
        $(this).show(); 
        pEvent = $.Event(event); 
        pEvent.target = target; 
        pEvent.data = evt.data; 
        pEvent.currentTarget = target; 
        pEvent.pageX = evt.pageX; 
        pEvent.pageY = evt.pageY; 
        pEvent.result = evt.result; 
        pEvent.timeStamp = evt.timeStamp; 
        pEvent.which = evt.which; 
        $(target).trigger(event, pEvent); 
       }); 
      }); 

ejemplo de trabajo, jsFiddle

preguntas;

1. Estoy creando el nuevo evento y pasando los datos relevantes, ¿sería seguro pasar la var evt con el objetivo y el actualTarget modificado?

2. ¿Cómo puedo propocionar un clic derecho?

¿Alguien tiene una mejor manera de lograr esto? Las otras preguntas relacionadas son bastante antiguas.

Respuesta

3

No hay limpiar forma de pasar los eventos entre navegadores. Puede pasar el evento (modificado) pero no puede garantizar que funcionará como podría haberlo hecho naturalmente, especialmente en el navegador cruzado.

Para botón derecho del ratón utilizando su código simplemente hacer esto: http://jsfiddle.net/6WMXh/20/

(que utilizó la mitad de la parte jquery información adicional, pero nunca hizo nada con él)

+0

estoy estoy tratando de enviar eventos a través de la tela, no en el lienzo. En IE9, cualquier elemento debajo del lienzo no recibe eventos de clic pasados. Puedes ver lo que quiero decir [aquí] (http://jsfiddle.net/VvPPW/1/) en IE9. – Andrew

+0

Oh derp, ¡no me di cuenta de que los elementos a continuación no eran lienzos! He editado mi respuesta, pero la triste realidad es que todavía no hay una forma dorada de hacerlo. –

+0

Además, agregué una solución para su bit de clic derecho –

Cuestiones relacionadas