2012-06-08 4 views
5

ho implementato pointer-events: none su un elemento di Raphael utilizzando jQuery come questo:puntatore-eventi: nessuno solution Raphael VML

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

Questo funziona bene, ma naturalmente in IE8, Raphael utilizza VML invece di SVG e questa soluzione non riesce .

Qualcuno ha un'altra soluzione per fare in modo che un elemento di Raphael ignori gli eventi.

risposta

7

L'unico modo per fare questo lavoro per IE8 (e precedenti) sarebbe quello di prendere in realtà l'evento, e nel gestore di eventi:

  1. nascondere l'elemento (.style.display='none')
  2. utilizzare il metodo elementFromPoint() di trovare l'elemento successivo sotto il 'collettore'
  3. re-create and fire the event on that element (vedi anche this)
  4. mostrano ancora una volta il catcher (.style.display='')

Questo approccio generale (meno passaggio 3) è stato usato per oltre 10 anni su IE per consentire all'utente di trascinare un elemento con direttamente sotto il cursore pur rilevando la 'mouseover' di possibili elementi di destinazione goccia sotto.

+0

bello. molto. La prima volta che ho condiviso un link che non è il mio :) –

+0

Sto correndo lo stesso problema con Raffaello e sto provando la tua soluzione. Ma in IE8 elementFromPoint restituisce null invece dell'elemento sottostante. ElementoFromPoint di IE8 è rotto? C'è un problema? – Fabian

+0

@Fabian porre questa come propria domanda con un banco di prova sufficientemente riproducibile. – Phrogz