2009-04-05 42 views
12

Tôi đã thử nghiệm bằng cách sử dụng thẻ <canvas> để vẽ sơ đồ và biểu đồ đơn giản và cho đến nay nó khá dễ dàng để làm việc. Tôi có một vấn đề suy nghĩ. Tôi không thể tìm ra cách vẽ văn bản trên <canvas> trong Safari. Trong Firefox 3.0, tôi có thể làm điều này:Làm thế nào để bạn vẽ văn bản trên một thẻ <canvas> trong Safari

Chart.prototype.drawTextCentered = function(context, text, x, y, font, color) { 
    if (context.mozDrawText) { 
    context.save(); 
    context.fillStyle = color; 
    context.mozTextStyle = font; 
    x -= 0.5 * context.mozMeasureText(text); 
    context.translate(x, y); 
    context.mozDrawText(text); 
    context.restore(); 
    } 
} 

Tôi đã nhìn thấy tham chiếu đến một phương pháp fillText() trong docs Safari của Apple, nhưng nó không xuất hiện để được hỗ trợ trong Safari 3.2. Đây có phải là điều gì đó hiện đang thiếu, hoặc là một số bí mật được giữ kín?

+0

FWIW, 'mozDrawText' bị phản đối ủng hộ của' fillText'. Xem http://developer.mozilla.org/en/Drawing_text_using_a_canvas#mozDrawText.28.29 –

+0

Vâng, tôi đã thấy điều đó nhưng nó không được triển khai trong Firefox 3.0, chỉ có 3.1 mà vẫn đang trong giai đoạn thử nghiệm. –

Trả lời

14

Tôi không tin rằng Safari 3.2 hỗ trợ hiển thị văn bản trong canvas.

Theo this blog, Safari 4 beta hỗ trợ văn bản tăng dần cho canvas, dựa trên HTML 5 canvas text APIs.

chỉnh sửa: Tôi đã xác nhận rằng đoạn mã sau đây làm việc trong Safari 4 beta:

<canvas id="canvas"></canvas> 
<script> 
    var context = document.getElementById("canvas").getContext("2d"); 
    context.fillText("Hello, world!", 10, 10); 
</script> 
+0

Tuyệt, tôi có thể sống mà không có văn bản 'cho đến khi Safari 4 được phát hành. –

+0

Điều gì về iPhone kể từ ngày 14/12/2009? Nó hỗ trợ gì? – Neo42

+0

Còn iPad 3 với Safari 5.1 thì sao? Nó có hỗ trợ phương thức fillText với đối số maxWidth không? – Slenkra

4

Đây không phải là lý tưởng, và có vẻ như bạn cũng tốt chờ đợi, nhưng để tham khảo, có một thư viện được gọi là strokeText có hiển thị phông chữ riêng. Nó hoạt động trong Firefox 1.5+, Opera 9+, Safari (Tôi không biết phiên bản nào) và IE6 + (sử dụng VML thay vì canvas).

+0

Thật tuyệt, nhưng tôi đang sử dụng '' cho nội dung hoàn toàn nội bộ ngay bây giờ và tất cả chúng ta đã cài đặt Firefox (và một số sử dụng Safari 4 beta). –

0

Tôi đang sử dụng thẻ <canvas> để vẽ biểu tượng Facebook, nhưng hình ảnh, văn bản được kéo dài.

<div class="content1"> 
    <canvas id = "e" class="myCanvas"> 
    <script> 
     var canvas = document.getElementById("e"); 
     var context = canvas.getContext("2d"); 
     context.fillStyle = "white"; 
     context.font = "normal 64px Facebook Letter Faces"; 
     context.fillText("facebook",10, 100); 
    </script> 
    FACEBOOK 
    </canvas> 
</div> 

CSS file:

.content1 
{ 
    float:left; 
    position:relative; 
    width:180px; 
    height:120px; 
} 

.myCanvas 
{ 
    float:right; 
    position:relative; 
    width:170px; 
    height:60px; 
    margin-right:5px; 
    margin-top:70px; 
    background-color:#044692; 

} 
+0

Bạn có thể thêm [fiddle] (http://jsfiddle.net) vào đó không? – JNF

+0

Đây là địa chỉ vui nhộn http://jsfiddle.net/mukhila/sVTWJ/ Cảm ơn bạn – Asokan

Các vấn đề liên quan