2012-06-20 14 views
5

Od pewnego czasu pracuję nad uzyskaniem tego wykresu mapowania siedzeń i stworzyłem kilka iteracji, a problem, który ciągle znajduję, polega na tym, że kiedy dostaję się do IE8, przesuwanie jest sposobem na powolny i opóźniony.Pan/Zoom boleśnie wolno w IE8 RaphaelJS

To, co mam w tym momencie, aby skrócić czas ładowania, tworzy png, który zastępuje moje "uderzenia", ponieważ zakładam, że 8 chciał ponownie wyświetlić za każdym razem, gdy przeciągnąłem mapę.

Dodałem również kontrole, które mają na celu wymuszenie na użytkownikach IE8 tej opcji, ale nadal występuje opóźnienie w panoramie, a jeśli mogę mieć użytkowników z IE8 (i, jeśli to możliwe, to jest to 7), nadal przeciągam/przesuwanie bez kontroli i odpowiedzi czas trochę szybciej, byłoby świetnie.

Here is my current JSFiddle

jestem jeszcze trochę zielony z JS, więc jeśli masz jakieś sugestie byłoby mile widziane. (Ramka PS Chrome jest niesamowite ale nie jest opcja dla mnie)

Aktualizacja

Usunąłem oryginalną funkcję przeciągania i zastąpić kod za pomocą Draggable funkcję jQueryUI użytkownika. Martin zasugerował, by po prostu przeciągnąć div, a nie elementy Rafaela. Dzięki temu możemy latać w ie6-8, co jest świetne, ale potem pojawiła się moja obawa o skalowanie. To, co widziałem przedtem na zbliżeniu, mój element papierowy WxH pozostałby w tym samym stosunku, odcinając mój rysunek po powiększeniu. Po przejrzeniu dokumentacji Raphaela natknąłem się na paper.setSize. setSize było dokładnie tym, czego potrzebowałem, aby pozwolić projektowi na poruszanie się i żłobienie w ie6-8 i prawie podbić wszystkie przeglądarki na swojej ścieżce.

Krótko mówiąc, za pomocą przeciągania i paper.setSize wyleczyłem mój krzyżowy zoom przeglądarki n 'pan blues.

+0

Więc patrzę w.spróbuj mieć nadzieję, że to przyspieszy. – user1431083

+0

* Dla każdego, kto to czyta * Bazując na moim przypuszczeniu co sugerował Martin, dodałem jquery ui do skrzypiec i dołączając .draggable() do elementu Raphael. Zwiększono prędkość przesuwu o 8 mm, ale pojawiają się nowe problemy z nieznacznym powiększeniem. [New JS Fiddle] (http://jsfiddle.net/knottAverage/ArKDp/31/) – user1431083

+0

WIĘCEJ WIADOMOŚCI W tym momencie wypróbowałem kilka metod przeciągania z jquery. Wszystko działa świetnie, z wyjątkiem ie8, wciąż mając problemy z przeciąganiem nie tak gładkie, jak bym tego chciał. – user1431083

Odpowiedz

3

Z tego, co można zobaczyć na skrzypcach, jesteś wyzwalania nowy rendering obrazu poprzez wywołanie .translate() wewnątrz uchwytu mousemove zdarzeń:

mapContainer.translate(currentMapPosX, currentMapPosY); 
rsrGroupies.translate(currentMapPosX, currentMapPosY); 

Takie podejście jest toksyczny dla wydajności we wszystkich przeglądarkach, niech sam IE8. Podczas pracy z VML w IE8 należy wziąć pod uwagę, że każda zmiana DOM w obrazie spowoduje ponowne wyświetlenie obrazu. Wykonanie tego podczas panoramowania zawsze będzie boleśnie powolne.

Widzę, że już używasz jQuery w skrzypcach. Jeśli chcesz zwiększyć wydajność panoramowanie, należy rozważyć następujący sposób:

  1. Renderowanie obrazu w Raphaël dokładnie raz na obecnym poziomie powiększenia. Nie próbuj zmieniać transformacji w obrazie VML/SVG w dowolnym momencie podczas panoramowania.
  2. W przypadku korzystania z funkcji panoramowania, którą już masz, przenieś lub przewiń kontener HTML zawierający obraz VML/SVG. Wyobraź sobie <div> z overflow: hidden i po prostu przesuń obraz wewnątrz względnie lub przewiń do odpowiedniej pozycji.

Będzie to wymagało korekty obliczeń współrzędnych, ale poprawi to wydajność we wszystkich przeglądarkach.

+0

Dziękuję za odpowiedź i radę dam mu szansę. – user1431083

+0

Hej, Martin, wreszcie dostałem szansę, aby rozwiązać ten problem ponownie. Chciałem tylko wyjaśnić. Mówisz, żeby wyrenderować raphael, a następnie powiedz # rsr.draggable(); czy to prawda, zakładam to? – user1431083

+0

Również powinienem użyć jquery górnego uchwytu zoom, czy jquery będzie w stanie obsłużyć zoom tych wektorów w ie8? – user1431083