2012-06-21 11 views
15

Ponieważ metoda translacji HTML5 przesuwa początkowo pochodzenie rysunku w stosunku do poprzedniego pochodzenia. (Kiedy używam ctx.translate (20,20) dwa razy z rzędu, otrzymuję taki sam wynik, jak gdy używam ctx.translate (40,40)) Teraz problem polega na tym, że chciałbym zresetować pochodzenie rysunku do jego pierwotnego położenia (położenia, jakie miał przed pierwszym użyciem translate() na nim), jak mam to zrobić?HTML5 tłumaczyć metodę, jak przywrócić domyślne?

Odpowiedz

35
ctx.setTransform(1, 0, 0, 1, 0, 0); 

MDN setTransform documentation

+0

Dokładnie to, czego szukałem. 'ctx.setTransform (1, 0, 0, 1, 0.5, 0.5);' i nigdy nie martw się resetowaniem transformacji. – Nolonar

+1

Chociaż to działa, odpowiedź @Loktar powinna być zaakceptowana jako najlepsza: http://stackoverflow.com/a/11144306/1866876 – viarnes

+1

Jeśli chcesz tylko cofnąć pojedynczą partię tłumaczeń z powrotem do domyślnej (nieprzetworzonej) przestrzeni, wtedy 'setTransform (1,0,0,1,0,0)' jest lepsze niż 'save & restore', ponieważ save/restore działa na każdej właściwości context zamiast tylko transformacji. – markE

46

Można to zrobić za pomocą .save() i .restore()

ctx.save(); 
ctx.translate(// do some translations); 
// draw whatever 
ctx.restore(); 

Trzeba zadzwonić save() na "zapisz" aktualny stan kontekstach. Następnie możesz wykonywać tłumaczenia, obracania itp. Po zakończeniu połączenia restore(), aby zresetować stan kontekstu do stanu, który był początkowo nazywany save().

Live Demo

MDN Tutorial also explaining it

+1

Dziękuję bardzo :) – Wingblade

+1

Jest to najlepsze rozwiązanie, ponieważ pozwala na stos transformacji. – sdgfsdh

2
ctx.resetTransform(); 

Zobacz MDN documentation aby uzyskać więcej informacji. Ma bardzo niską kompatybilność z przeglądarką.

+0

Tak, też się z tym spotkałem, całkiem fajnie. +1 – Loktar

Powiązane problemy