2010-07-28 7 views
6

Tôi đang cố viết một số văn bản vào phần tử canvas, nhưng có vẻ như các tùy chọn phông chữ mà tôi đưa vào đang bị bỏ qua hoàn toàn. Không có vấn đề gì tôi thay đổi chúng, tất cả đều giống nhau, mà tôi tin là sans-serif 10px mặc định. Heres những gì tôi có (chức năng này chạy trên tải)Phông chữ canvas HTML 5 bị bỏ qua

function start() 
{ 
    canvas = document.getElementById('c'); 
    ctx = canvas.getContext('2d'); 
    ctx.fillStyle = "white"; 
    ctx.font = "12px monospace"; 
    ctx.textBaseline = "top"; 
} 

Nó không hoạt động trong Firefox hoặc Chrome.

+1

Điều này cũng xảy ra nếu bạn chuyển một chuỗi định dạng không đúng, chẳng hạn như '" 12 px monospace "' có thêm khoảng trắng. – Noumenon

Trả lời

5

Khi nó quay ra, sự thay đổi ctx.font cần phải được sử dụng trong các chức năng tương tự mà là làm fillText()

Điều này làm cho nó hoạt động như một nét duyên dáng.

EDIT

Như richtaur nêu trong bình luận của mình, câu trả lời này là sai. Ngữ cảnh của bạn cần phải được lưu và khôi phục bằng cách sử dụng ctx.save()ctx.restore() vì nó hiện đang được đặt lại khi bạn gọi canvas.getContext ('2d') một lần nữa.

+0

Tôi nghi ngờ rằng mỗi lần bạn lấy lại bối cảnh đồ họa bằng canvas.getContext ('2d'), bạn sẽ nhận được một bối cảnh mới được đặt lại về phông chữ mặc định. Điều này có ý nghĩa, bởi vì bạn đang thực hiện các thao tác vẽ và có thể sẽ hiển thị tất cả các loại văn bản trong tất cả các phông chữ khác nhau và chuyển qua chúng khi bạn hiển thị từng khung hình ... do đó (lại) đặt phông chữ cho mỗi ngữ cảnh mới giác quan. – Triynko

+0

> Khi nó quay ra, thay đổi ctx.font cần phải được sử dụng trong cùng một chức năng đang làm fillText() <- Đó không phải là cách nó hoạt động. Các cài đặt là toàn cục đối với ngữ cảnh đó, vì vậy nó có thể bị ghi đè trong hàm khác của bạn. Bạn muốn làm như 'ctx.save()' rồi 'ctx.restore()' để lưu trạng thái ngữ cảnh của bạn. Xem: https://developer.mozilla.org/en/Drawing_text_using_a_canvas – richtaur

8

Điều này cũng có thể xảy ra nếu bạn đặt lại kích thước của canvas. Ít nhất, tôi thấy điều này trong Chrome 23 hôm nay.

context.font = 'bold 20px arial'; 
canvas.width = 100; 
canvas.height = 100; 
console.log(context.font); // gives '10px sans-serif' 
+1

Mẹo tuyệt vời! Tôi đã trải qua mãi mãi về điều này. Tại sao các thuộc tính như thế sẽ được đặt lại khi kích thước thay đổi? Dường như vô nghĩa với tôi. – AdrianCooney