Bagaimana saya bisa secara otomatis skala <canvas>
elemen HTML5 agar sesuai dengan halaman?
Sebagai contoh, saya bisa mendapatkan <div>
skala dengan mengatur height
dan width
properti ke 100%, tetapi <canvas>
skala tidak akan, bukan?
javascript
html
html5-canvas
devyn
sumber
sumber
Jawaban:
Saya yakin saya telah menemukan solusi elegan untuk ini:
JavaScript
CSS
Sejauh ini, tidak ada dampak kinerja negatif yang besar bagi saya.
sumber
body, html { margin: 0px;}
Solusi berikut ini bekerja untuk saya yang terbaik. Karena saya relatif baru dalam pengkodean, saya ingin memiliki konfirmasi visual bahwa ada sesuatu yang bekerja seperti yang saya harapkan. Saya menemukannya di situs berikut: http://htmlcheats.com/html/resize-the-html5-canvas-dyamically/
Berikut kodenya:
Perbatasan biru menunjukkan tepi kanvas ukuran, dan selalu di sepanjang tepi jendela, terlihat di keempat sisi, yang BUKAN kasus untuk beberapa jawaban lain di atas. Semoga ini bisa membantu.
sumber
overflow: hidden
dandisplay: block
adalah apa yang hilang bagi saya untuk mendapatkan kerja ini dengan benar.Pada dasarnya apa yang harus Anda lakukan adalah mengikat acara onresize ke tubuh Anda, setelah Anda menangkap acara Anda hanya perlu mengubah ukuran kanvas menggunakan window.innerWidth dan window.innerHeight.
sumber
Mengatur kanvas mengkoordinasikan lebar dan tinggi ruang berdasarkan dimensi klien browser mengharuskan Anda untuk mengubah ukuran dan menggambar ulang setiap kali browser diubah ukurannya.
Solusi yang tidak terlalu berbelit-belit adalah mempertahankan dimensi yang dapat digambar dalam variabel Javascript, tetapi mengatur dimensi kanvas berdasarkan pada screen.width, screen.dimensi ketinggian. Gunakan CSS agar sesuai:
Jendela browser umumnya tidak akan pernah lebih besar dari layar itu sendiri (kecuali jika resolusi layar salah dilaporkan, karena bisa dengan monitor ganda yang tidak cocok), sehingga latar belakang tidak akan ditampilkan dan proporsi piksel tidak akan bervariasi. Pixel kanvas akan berbanding lurus dengan resolusi layar kecuali Anda menggunakan CSS untuk mengukur skala kanvas.
sumber
Sebuah CSS murni pendekatan menambah larutan @jerseyboy di atas.
Bekerja di Firefox (diuji pada v29), Chrome (diuji pada v34) dan Internet Explorer (diuji pada v11).
Tautan ke contoh: http://temporaer.net/open/so/140502_canvas-fit-to-window.html
Tapi berhati-hatilah, seperti yang dinyatakan @jerseyboy dalam komentarnya:
sumber
sumber
Kecuali jika Anda ingin kanvas untuk meningkatkan data gambar Anda secara otomatis (itulah yang dibicarakan oleh jawaban James Black, tetapi tidak akan terlihat cantik), Anda harus mengubah ukurannya sendiri dan menggambar ulang gambar tersebut. Memusatkan kanvas
sumber
Jika div Anda sepenuhnya mengisi halaman web maka Anda dapat mengisi div itu dan memiliki kanvas yang mengisi div itu.
Anda mungkin menemukan ini menarik, karena Anda mungkin perlu menggunakan css untuk menggunakan persentase, tetapi, itu tergantung pada browser yang Anda gunakan, dan seberapa banyak itu sesuai dengan spesifikasi: http://www.whatwg.org/ specs / web-apps / current-work / multipage / the-canvas-element.html # the-canvas-element
Anda mungkin perlu mendapatkan offsetWidth dan tinggi div, atau mendapatkan tinggi / lebar jendela dan menetapkannya sebagai nilai piksel.
sumber
CSS
JavaScript
sumber
Jika Anda tertarik untuk mempertahankan rasio aspek dan melakukannya dengan CSS murni (mengingat rasio aspek) Anda dapat melakukan sesuatu seperti di bawah ini. Kuncinya adalah
padding-bottom
pada::content
elemen yang mengukurcontainer
elemen. Ini berukuran relatif terhadap lebar induknya, yang secara100%
default. Rasio yang ditentukan di sini harus sesuai dengan rasio ukuran padacanvas
elemen.sumber
Menggunakan jQuery Anda dapat melacak ukuran jendela dan mengubah lebar kanvas Anda menggunakan jQuery juga.
Sesuatu seperti itu
sumber
sumber
Saya pikir inilah yang harus kita lakukan dengan tepat: http://www.html5rocks.com/en/tutorials/casestudies/gopherwoord-studios-resizing-html5-games/
sumber
Saya menggunakan sketch.js jadi setelah saya menjalankan perintah init untuk kanvas saya mengubah lebar dan tinggi dengan jquery. Ini mendasarkan dimensi pada elemen induk.
sumber