2010-05-04 28 views
6

के समान प्रस्तुत करना मैं कैनवास टैग और जावास्क्रिप्ट के साथ प्रयोग कर रहा हूं। मैंने एक ऐसा पृष्ठ बनाया है जो ट्विटर सार्वजनिक टाइमलाइन से ट्वीट लेता है और उन्हें दृश्य में एनिमेट करता है। यह एनीमेशन के लिए पृष्ठभूमि में कैनवास तत्व का उपयोग करके काम करता है। जब एनीमेशन पूर्ण हो जाता है, तो यह शीर्ष पर एक ही पाठ के साथ एक div तत्व बनाता है। मैं ऐसा करता हूं ताकि ट्वीट टेक्स्ट चयन योग्य हो और लिंक क्लिक करने योग्य हो।फ़ायरफ़ॉक्स को कैनवास टेक्स्ट को सीएसएस टेक्स्ट

अब सफारी, क्रोम और यहां तक ​​कि ओपेरा में, कैनवास टेक्स्ट और डिव टेक्स्ट लगभग बिल्कुल वही दिखते हैं। फिर भी फ़ायरफ़ॉक्स में, टेक्स्ट का आकार इसे अलग-अलग करने के लिए पर्याप्त है, जिससे वह div में बदल जाता है।

क्या कोई जानता है कि कैसे फ़ायरफ़ॉक्स को कैनवास तत्व और सीएसएस का उपयोग करके div को समान रूप से प्रस्तुत करना है? या यह इंजन के साथ एक प्रतिपादन असंगतता है।

यदि आप देखना चाहते हैं कि मेरा पृष्ठ क्या है, तो मैंने पृष्ठ on my website रखा है।

अब कोड के लिए:

सीएसएस मैं div प्रतिपादन के लिए उपयोग कर रहा हूँ शामिल हैं:

line-height: 21px; font-weight: 100; font-family: Georgia, "New Century Schoolbook", "Nimbus Roman No9 L", serif; font-size: 20px; 

कैनवास पर प्रतिपादन के लिए मैं उपयोग कर रहा हूँ:

this.context.font = this.scale + 'px Georgia'; 
this.context.fillStyle = "white"; 
this.context.strokeStyle = 'white'; 
this.context.fillText(this.text, 0, 0); 
this.context.strokeText(this.text, 0, 0); 

जहां this.scale एक एनिमेटेड स्केल फैक्टर है जो बिल्कुल 20px पर समाप्त होता है। तो, संक्षेप में, मैं एक ही फ़ॉन्ट का उपयोग कर रहा हूं और उसी पीएक्स आकार पर समाप्त हो रहा हूं, फिर भी फ़ायरफ़ॉक्स कैनवास और सीएसएस के बीच पाठ को अलग-अलग प्रस्तुत करता है।

(संपादित) यहाँ एक स्क्रीनशॉट उदाहरण है: alt text http://danforys.com/temp/firefox-behaviour.png

पहली पंक्ति कैनवास का उपयोग करने में पाठ animating है, दूसरी पंक्ति जिसके परिणामस्वरूप div है।

+0

हम्म, स्क्रीनशॉट पर बारीकी से देखकर, शायद यह रिक्त स्थान है। पत्र एक समान आकार को देखता है, लेकिन सीएसएस div पर रिक्त स्थान थोड़ा अधिक दिखता है। –

उत्तर

1

ठीक है, मेरे पास test case है।

मैंने एक ही पाठ के साथ एक div और कैनवास तत्व पक्ष बनाया। यह पता चला है कि फ़ॉन्ट प्रतिपादन एक लाल हेरिंग था। फ़ायरफ़ॉक्स के साथ क्या भिन्न है चरित्र की चौड़ाई की रिपोर्टिंग। मेरा ट्विटर विज़ुअलाइज़र माप टेक्स्ट() चौड़ाई का उपयोग करके प्रत्येक वर्ण की चौड़ाई की गणना करता है और उन्हें तदनुसार रखता है। किसी कारण से, फ़ायरफ़ॉक्स पर वर्णों की चौड़ाई छोटी होती है।

अजीब तरह, परीक्षण के मामले में मैं दो बातों को मापने:

  1. पूरे पाठ
  2. पाठ

क्रोम में हर किरदार की चौड़ाई का योग की कुल चौड़ाई , वे दोनों 39 9 पीएक्स पर बाहर आते हैं। फ़ायरफ़ॉक्स में, पहला 3 9 3 पीएक्स के रूप में आता है, दूसरा 367 पीएक्स पर आता है।

संपादित करें: बग बंद कर दिया गया है। मोज़िला it's invalid कहता है, मैं अभी भी कहता हूं कि यह अन्य ब्राउज़रों के साथ असंगत है। मुझे ऐसा करने का एक और तरीका मिलना होगा, या मोज़िला को मनाने के लिए पर्याप्त जानकारी होगी कि यह सब के बाद एक बग है। वैसे भी सुनने के लिए धन्यवाद!

+0

ठीक है, मैं केवल अनुमान लगा सकता हूं कि यह एक फ़ायरफ़ॉक्स जावास्क्रिप्ट बग है। इसकी सूचना दी है: https://bugzilla.mozilla.org/show_bug.cgi?id=563758 –

+0

मैं इसे एफएफ 3.6 में डुप्लिकेट नहीं कर सकता, इसलिए यह हालिया परिवर्तन है? क्या आपने यह देखने के लिए अक्षर-दूरी के साथ खेला है कि क्या आप इन्हें लाइन अप कर सकते हैं? यह मेरे लिए अंतर की तरह दिखता है। – ndp

+0

इसके अलावा, यदि ओएस सम्मान का काम करता है उदा। कर्नाई पैरामीटर, टेक्स्ट की कुल चौड़ाई एकल वर्ण चौड़ाई के योग से भिन्न हो सकती है। यदि आप इसका समर्थन करने वाले फोंट का उपयोग करते हैं, तो आप कुछ चरित्र संयोजनों के लिए भी लिगचर (यानी विशेष वर्ण) प्राप्त कर सकते हैं जिन्हें आप अपने दृष्टिकोण का उपयोग करके अनुकरण नहीं कर सकते हैं। – MartinStettner

0

मैं फ़ायरफ़ॉक्स और क्रोम (गति के अलावा ...) के बीच इतना अंतर नहीं देख सकता।

क्या आपने strokeText का उपयोग न करने का प्रयास किया है? मुझे लगता है कि पाठ आमतौर पर केवल -ऑपरेशंस भरने के द्वारा प्रदान किया जाता है।

कूल ऐप, बीटीडब्ल्यू!

+0

धन्यवाद मार्टिन! हां, मैंने स्ट्रोक के साथ और बिना प्रयास किया है। बिना, पाठ बहुत पतला दिखाई देता है और सभी तीन ब्राउज़रों में div के लिए बहुत अलग दिखता है। ऐसा लगता है कि सीएसएस पाठ दोनों स्ट्रोक और भरे हुए हैं, या वजन के बराबर है। सीएसएस में फ़ॉन्ट-वेट भी ध्यान दें, इसे 'बोल्ड' से कम मूल्यों में बदलने से भी कोई फर्क नहीं पड़ता। यह केवल वहां है क्योंकि मैं प्रयोग कर रहा था। –

+0

यदि आप बिंदु पर बारीकी से देखते हैं तो पाठ ऊपर की ओर एनिमेट करना शुरू कर देता है, तो चरित्र का आकार कूदता है। यदि आप लाइन के दाईं ओर वर्णों के साथ लंबी ट्वीट्स देखते हैं तो यह फ़ायरफ़ॉक्स में विशेष रूप से ध्यान देने योग्य है। संचयी रूप से, लाइन लंबाई में काफी बड़ी कूद है। कम से कम ओएसएक्स पर एफएफ 3.6.3 पर है। –

+0

दिलचस्प बात यह है कि प्रतिपादन क्रोम के संस्करणों के बीच भी भिन्न होता है। घर पर (ओएसएक्स हिम तेंदुए पर क्रोम [मैं बाद में संस्करण की जांच करूंगा], स्ट्रोक * और * भरा टेक्स्ट div के समान दिखता है। काम पर, तेंदुए क्रोम 5.0.342.9 बीटा पर, स्ट्रोक और भरे हुए पाठ बहुत अधिक है div से। मुझे लगता है कि मुझे इसकी जांच करने की आवश्यकता है ... –

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