मैं आपको यह कामकाज प्रस्तुत करता हूं। असल में आप एक बार में अपने टेक्स्ट को एक char आउटपुट करते हैं, और प्रत्येक अक्षर की चौड़ाई निर्धारित करने के लिए इनबिल्ट measureText()
फ़ंक्शन का उपयोग करते हैं। फिर हम उस स्थिति को ऑफसेट करते हैं जहां हम उसी राशि से आकर्षित करना चाहते थे। आप जिस प्रभाव को चाहते हैं उसका उत्पादन करने के लिए आप इस स्निपेट को संशोधित कर सकते हैं।
मान लीजिए हम इतनी तरह HTML है:
कार्रवाई at jFiddle में इसे देखें: हम एक आउटपुट प्राप्त होता
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
function randomColor(){
var r = Math.floor(Math.random()*256);
var g = Math.floor(Math.random()*256);
var b = Math.floor(Math.random()*256);
return "rgb("+ r + "," + g + "," + b +")";
}
function texter(str, x, y){
for(var i = 0; i <= str.length; ++i){
var ch = str.charAt(i);
ctx.fillStyle = randomColor();
ctx.fillText(ch, x, y);
x += ctx.measureText(ch).width;
}
}
texter("What's up?", 10, 30);
: तो जैसे
<canvas id="canvas" width="300" height="300"/>
और जावास्क्रिप्ट। मैंने नवीनतम क्रोम का इस्तेमाल किया।
धन्यवाद। मैं उम्मीद कर रहा था कि एक से अधिक बार लिखने के बिना ऐसा करने का कोई तरीका था, लेकिन आपका समाधान वास्तव में एक अच्छा विकल्प है, खासकर जब से यह मेरे गतिशील पाठ आकार को गड़बड़ नहीं करेगा। धन्यवाद। –
आपका स्वागत है। और stackoverflow में आपका स्वागत है! इस बीच आपको उन उत्तरों को चिह्नित करना चाहिए जो आपकी कल्पना को * स्वीकृत * के रूप में हड़ताल करते हैं। ;) – Gleno
आह, किया। मैंने इस विधि के संशोधित संस्करण का उपयोग करके जो कुछ भी करना चाहता था उसे लागू किया है। एक बात मैंने देखी है कि एक एनीमेशन में यदि आप प्रत्येक फ्रेम को प्रत्येक फ्रेम खींचने जा रहे हैं, तो यह फ़ायरफ़ॉक्स में बेहद लगी होगी (आईई/क्रोम ठीक थे)। चूंकि मैं पहला रंग अलग चाहता था, इसलिए मैंने पहला चार लिखा, फिर बाकी। –