2010-07-28 12 views
6

मैं कुछ पाठ को कैनवास तत्व में लिखने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि मैंने जो फ़ॉन्ट विकल्प डाले हैं उन्हें पूरी तरह अनदेखा किया जा रहा है। कोई फर्क नहीं पड़ता कि मैं उन्हें क्या बदलता हूं, यह सब एक ही आता है, जिसे मैं डिफ़ॉल्ट 10px संस-सेरिफ़ मानता हूं। मेरे पास जो है (यह फ़ंक्शन लोड पर चलता है)एचटीएमएल 5 कैनवास फ़ॉन्ट को अनदेखा किया जा रहा है

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

यह फ़ायरफ़ॉक्स या क्रोम में काम नहीं करता है।

+1

यह भी होता है यदि आप खराब प्रारूप स्ट्रिंग में पास करते हैं, जैसे अतिरिक्त स्पेस के साथ '12 पीएक्स मोनोस्पेस"। – Noumenon

उत्तर

5

यह पता चला है के रूप में, ctx.font परिवर्तन यह है कि fillText()

यह है कि यह एक आकर्षण की तरह काम करता है क्या कर रहा है एक ही समारोह में इस्तेमाल किया जाना चाहिए।

संपादित

उसकी टिप्पणी में आपका उल्लेख richtaur रूप में, यह जवाब गलत है। ctx.save() और ctx.restore() का उपयोग करके आपके संदर्भ को सहेजने और पुनर्स्थापित करने की आवश्यकता है क्योंकि जब आप कैनवास.getकॉन्टेक्स्ट ('2 डी') को फिर से कॉल करते हैं तो वर्तमान में रीसेट हो जाता है।

+0

मुझे संदेह है कि प्रत्येक बार जब आप canvas.getContext ('2d') के साथ ग्राफिक्स संदर्भ पुनः प्राप्त करेंगे, तो आपको एक नया संदर्भ मिलता है जो डिफ़ॉल्ट फ़ॉन्ट पर रीसेट हो जाता है। यह समझ में आता है, क्योंकि आप ड्राइंग ऑपरेशंस कर रहे हैं, और शायद सभी अलग-अलग फ़ॉन्ट्स में सभी प्रकार के टेक्स्ट प्रस्तुत करने जा रहे हैं, और प्रत्येक फ्रेम को प्रस्तुत करते समय उनके माध्यम से चक्र ... इसलिए (प्रत्येक) प्रत्येक नए संदर्भ के लिए फ़ॉन्ट सेट करना समझ। – Triynko

+0

> जैसा कि यह पता चला है, ctx.font परिवर्तन को उसी फ़ंक्शन में उपयोग करने की आवश्यकता है जो fillText() <- कर रहा है - यह नहीं है कि यह कैसे काम करता है। सेटिंग उस संदर्भ में वैश्विक हैं, इसलिए शायद यह आपके अन्य फ़ंक्शन में ओवरराइड हो रही है। आप अपने संदर्भ की स्थिति को बचाने के लिए 'ctx.save()' तो 'ctx.restore()' जैसे करना चाहते हैं। देखें: https://developer.mozilla.org/en/Drawing_text_using_a_canvas – richtaur

8

यह भी हो सकता है यदि आप कैनवास के आकार को रीसेट करते हैं। कम से कम, मैंने इसे क्रोम 23 में आज देखा।

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

ग्रेट टिप! मैंने इस पर हमेशा के लिए बिताया। जब आकार बदलता है तो उस तरह की संपत्ति रीसेट क्यों हो जाएगी? मेरे लिए बकवास लगता है। – AdrianCooney

संबंधित मुद्दे