আমি এই শব্দটি একটি অ্যানিমেশন দিয়ে আঁকতে চাই, যেমন পৃষ্ঠাটি শব্দটি "লেখায়" ঠিক তেমনভাবেই শব্দটি করে দেয়
ক্যানভাস সংস্করণ
এটি একক অক্ষর আঁকবে যেমন একটি হাত দ্বারা লেখার মতো। এটি একটি দীর্ঘ ড্যাশ-প্যাটার্ন ব্যবহার করে যেখানে প্রতি চার্জ সময়ের সাথে অন / অফ অর্ডার অদলবদল করা হয়। এটির গতির প্যারামিটারও রয়েছে।
অ্যানিমেশন উদাহরণ (নীচে ডেমো দেখুন)
বাস্তববাদ এবং জৈবিক অনুভূতি বাড়ানোর জন্য, আমি এলোমেলো লেটার-স্পেসিং, একটি ডেল্টা অফসেট, স্বচ্ছতা, একটি খুব সূক্ষ্ম ঘূর্ণন এবং অবশেষে একটি ইতিমধ্যে "হস্তাক্ষর" ফন্ট ব্যবহার করেছি। এগুলি "লেখার শৈলীগুলির" বিস্তৃত পরিসীমা সরবরাহের জন্য গতিশীল পরামিতি হিসাবে মোড়ানো যেতে পারে।
আরও বাস্তবের চেহারার জন্য পাথের ডেটা প্রয়োজন হবে যা এটি ডিফল্টরূপে নয়। তবে এটি কোডের একটি সংক্ষিপ্ত এবং দক্ষ অংশ যা হাতের লিখিত আচরণের প্রায় কাছাকাছি, এবং কার্যকর করা সহজ।
কিভাবে এটা কাজ করে
একটি ড্যাশ প্যাটার্ন সংজ্ঞায়িত করে আমরা মার্চিং পিঁপড়া, বিন্দুযুক্ত লাইন এবং আরও কিছু তৈরি করতে পারি। "অফ" বিন্দুর জন্য খুব দীর্ঘ বিন্দুটি সংজ্ঞায়িত করে এবং ধীরে ধীরে "চালু" বিন্দুটি বৃদ্ধি করে এটির সুবিধা গ্রহণ করা, এটি বিন্দুর দৈর্ঘ্য অ্যানিমেটেড করার সময় স্ট্রোক করলে লাইনটি আঁকানোর মায়া দেয়।
অফ ডট যেহেতু দীর্ঘ তাই পুনরাবৃত্তি প্যাটার্নটি দৃশ্যমান হবে না (টাইপফেসটি ব্যবহার করার আকার এবং বৈশিষ্ট্যগুলির সাথে দৈর্ঘ্য পৃথক হবে)। চিঠির পথটির দৈর্ঘ্য হবে তাই আমাদের নিশ্চিত করতে হবে যে আমাদের প্রতিটি বিন্দু কমপক্ষে এই দৈর্ঘ্যটি coveringেকে রাখছে।
একাধিক পাথ (f.ex. O, R, P ইত্যাদি) বর্ণযুক্ত অক্ষরের জন্য যেমন একটি রূপরেখার জন্য, একটি ফাঁকা অংশের জন্য, লাইনগুলি একই সাথে টানা প্রদর্শিত হবে। আমরা এই কৌশলটি নিয়ে তেমন কিছু করতে পারি না কারণ প্রতিটি পাথ বিভাগকে আলাদাভাবে স্ট্রোক করার জন্য প্রয়োজন হবে।
সঙ্গতি
ক্যানভাস উপাদানটিকে সমর্থন করে না এমন ব্রাউজারগুলির জন্য পাঠ্যগুলি দেখানোর বিকল্প উপায় ট্যাগগুলির মধ্যে স্থাপন করা যেতে পারে, উদাহরণস্বরূপ একটি স্টাইলযুক্ত পাঠ্য:
<canvas ...>
<div class="txtStyle">STROKE-ON CANVAS</div>
</canvas>
ডেমো
এটি সরাসরি অ্যানিমেটেড স্ট্রোক অন উত্পাদন করে ( কোনও নির্ভরতা নেই ) -
var ctx = document.querySelector("canvas").getContext("2d"),
dashLen = 220, dashOffset = dashLen, speed = 5,
txt = "STROKE-ON CANVAS", x = 30, i = 0;
ctx.font = "50px Comic Sans MS, cursive, TSCu_Comic, sans-serif";
ctx.lineWidth = 5; ctx.lineJoin = "round"; ctx.globalAlpha = 2/3;
ctx.strokeStyle = ctx.fillStyle = "#1f2f90";
(function loop() {
ctx.clearRect(x, 0, 60, 150);
ctx.setLineDash([dashLen - dashOffset, dashOffset - speed]); // create a long dash mask
dashOffset -= speed; // reduce dash length
ctx.strokeText(txt[i], x, 90); // stroke letter
if (dashOffset > 0) requestAnimationFrame(loop); // animate
else {
ctx.fillText(txt[i], x, 90); // fill final letter
dashOffset = dashLen; // prep next char
x += ctx.measureText(txt[i++]).width + ctx.lineWidth * Math.random();
ctx.setTransform(1, 0, 0, 1, 0, 3 * Math.random()); // random y-delta
ctx.rotate(Math.random() * 0.005); // random rotation
if (i < txt.length) requestAnimationFrame(loop);
}
})();
canvas {background:url(http://i.imgur.com/5RIXWIE.png)}
<canvas width=630></canvas>