2012-06-08 10 views
5

I wprowadziły pointer-events: none na elemencie Raphael użyciu jQuery tak:pointer-events: brak VML rozwiązanie Raphael

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

Działa to dobrze, ale oczywiście w IE8, Raphael wykorzystuje VML zamiast SVG i to rozwiązanie nie .

Czy ktoś ma inne rozwiązanie, aby zasadniczo element Raphael ignorować zdarzenia.

Odpowiedz

7

Jedynym sposobem, aby to działało dla IE8 (i wcześniej) byłoby rzeczywiście połowu zdarzenie, aw obsługi zdarzenia:

  1. ukryć element (.style.display='none')
  2. użyć metody elementFromPoint() aby znaleźć następny element poniżej 'łapacz'
  3. re-create and fire the event on that element (patrz również this)
  4. pokazać Catcher ponownie (.style.display='')

To ogólne podejście (minus krok 3) było używane przez ponad 10 lat w IE, aby umożliwić użytkownikowi przeciągnięcie elementu za pomocą niego bezpośrednio pod kursorem, jednocześnie wykrywając "przesunięcie kursora myszki" możliwych elementów docelowych spadku poniżej.

+0

ładny. bardzo. pierwszy raz udostępniłem link, który nie jest mój własny :) –

+0

Występuję w tym samym problemie z Raphaelem i próbuję Twojego rozwiązania. Ale w IE8 elementFromPoint zwraca null zamiast elementu podstawowego. Czy elementFotPoint IE8 jest zepsuty? Czy jest jakiś problem? – Fabian

+0

@Fabian Zadaj to jako własne pytanie wraz z dostatecznie powtarzalnym testem. – Phrogz