Jak mogę automatycznie skalować <canvas>
element HTML5 , aby pasował do strony?
Na przykład mogę uzyskać <div>
skalowanie, ustawiając właściwości height
i width
na 100%, ale <canvas>
nie będzie skalować, prawda?
javascript
html
html5-canvas
devyn
źródło
źródło
Odpowiedzi:
Myślę, że znalazłem eleganckie rozwiązanie tego:
JavaScript
CSS
Do tej pory nie miał dla mnie dużego negatywnego wpływu na wydajność.
źródło
body, html { margin: 0px;}
Poniższe rozwiązanie działało dla mnie najlepiej. Ponieważ jestem stosunkowo nowy w programowaniu, lubię mieć wizualne potwierdzenie, że coś działa tak, jak tego oczekuję. Znalazłem go na następującej stronie: http://htmlcheats.com/html/resize-the-html5-canvas-dyamically/
Oto kod:
Niebieska ramka pokazuje krawędź płótna zmiany rozmiaru i jest zawsze wzdłuż krawędzi okna, widoczna ze wszystkich 4 stron, co NIE było w przypadku niektórych z powyższych odpowiedzi. Mam nadzieję, że to pomoże.
źródło
overflow: hidden
Idisplay: block
to czego brakuje dla mnie to działa prawidłowo.Zasadniczo musisz powiązać zdarzenie onresize ze swoim ciałem, gdy złapiesz zdarzenie, wystarczy zmienić rozmiar płótna za pomocą window.innerWidth i window.innerHeight.
źródło
Ustawienie szerokości i wysokości współrzędnych obszaru roboczego na podstawie wymiarów klienta przeglądarki wymaga zmiany rozmiaru i przerysowania przy każdym zmianie rozmiaru przeglądarki.
Mniej skomplikowanym rozwiązaniem jest utrzymanie wymiarów do rysowania w zmiennych JavaScript, ale ustawienie wymiarów obszaru roboczego na podstawie wymiarów screen.width, screen.height. Użyj CSS, aby dopasować:
Okno przeglądarki zasadniczo nigdy nie będzie większe niż sam ekran (z wyjątkiem sytuacji, w których rozdzielczość ekranu jest nieprawidłowo zgłaszana, tak jak w przypadku niepasujących podwójnych monitorów), więc tło nie będzie się wyświetlać, a proporcje pikseli nie będą się różnić. Piksele płótna będą wprost proporcjonalne do rozdzielczości ekranu, chyba że użyjesz CSS do skalowania płótna.
źródło
Czystym CSS podejście dodanie do roztworu @jerseyboy powyżej.
Działa w Firefox (testowany w wersji 29), Chrome (testowany w wersji 34) i Internet Explorer (testowany w wersji 11).
Link do przykładu: http://temporaer.net/open/so/140502_canvas-fit-to-window.html
Ale uważaj, jak pisze @jerseyboy w swoim komentarzu:
źródło
źródło
O ile nie chcesz, aby płótno automatycznie skalowało dane obrazu (o tym mówi odpowiedź Jamesa Blacka, ale nie będzie ładnie wyglądać), musisz sam zmienić jego rozmiar i przerysować obraz. Centrowanie płótna
źródło
Jeśli Twój div całkowicie wypełnił stronę, możesz wypełnić ten div, a więc mieć płótno, które wypełni div.
To może być interesujące, ponieważ może być konieczne użycie css, aby użyć wartości procentowej, ale zależy to od używanej przeglądarki i tego, ile zgadza się ze specyfikacją: http://www.whatwg.org/ specs / web-apps / current-work / multipage / the-canvas-element.html # the-canvas-element
Może być konieczne uzyskanie offsetWidth i wysokości div lub uzyskanie wysokości / szerokości okna i ustawienie go jako wartości w pikselach.
źródło
CSS
JavaScript
źródło
Jeśli chcesz zachować proporcje i zrobić to w czystym CSS (biorąc pod uwagę proporcje), możesz zrobić coś takiego jak poniżej. Kluczem jest
padding-bottom
na::content
element, który dopasowujecontainer
element. Jest on dostosowywany do szerokości jego rodzica, która jest100%
domyślnie. Podany tutaj współczynnik musi być zgodny ze stosunkiem rozmiarów nacanvas
elementu.źródło
Za pomocą jQuery można śledzić zmianę rozmiaru okna i zmieniać szerokość płótna, również przy użyciu jQuery.
Coś w tym stylu
źródło
źródło
Myślę, że właśnie to powinniśmy zrobić: http://www.html5rocks.com/en/tutorials/casestudies/gopherwoord-studios-resizing-html5-games/
źródło
Korzystam z sketch.js, więc po uruchomieniu komendy init dla obszaru roboczego zmieniam szerokość i wysokość za pomocą jquery. Opiera wymiary na elemencie nadrzędnym.
źródło