SVG
ফাইল বিন্যাসের মতো অঙ্কনের একটি স্পেসিফিকেশন। একটি এসভিজি একটি নথি document আপনি এইচটিএমএল ফাইলের মতো এসভিজি ফাইলগুলি বিনিময় করতে পারেন। এবং অতিরিক্ত হিসাবে এসভিজি উপাদানগুলি এবং এইচটিএমএল উপাদানগুলি একই ডিওএম এপিআই ভাগ করে, এইচটিএমএল ডিওএম তৈরি করা যেমন সম্ভব তেমনভাবে একটি এসভিজি ডোম তৈরি করতে জাভাস্ক্রিপ্ট ব্যবহার করা সম্ভব। তবে এসভিজি ফাইল তৈরি করতে আপনার জাভাস্ক্রিপ্টের দরকার নেই। একটি সাধারণ পাঠ্য সম্পাদক একটি এসভিজি লিখতে যথেষ্ট। অঙ্কনটিতে আকারগুলির স্থানাঙ্ক গণনা করতে আপনার কমপক্ষে একটি ক্যালকুলেটর প্রয়োজন।
CANVAS
কেবল একটি অঙ্কনের অঞ্চল। ক্যানভাসের সামগ্রী তৈরি করতে জাভাস্ক্রিপ্ট ব্যবহার করা দরকার। আপনি একটি ক্যানভাস বিনিময় করতে পারবেন না। এটি কোনও দলিল নয়। এবং ক্যানভাসের উপাদানগুলি ডিওএম গাছের অংশ নয়। আপনি ক্যানভাসের বিষয়বস্তুগুলি পরিচালনা করতে DOM এপিআই ব্যবহার করতে পারবেন না। পরিবর্তে ক্যানভাসে আকার আঁকতে আপনাকে একটি উত্সর্গীকৃত ক্যানভাস এপিআই ব্যবহার করতে হবে।
এর সুবিধাটি SVG
হ'ল, আপনি অঙ্কনটি একটি দস্তাবেজ হিসাবে বিনিময় করতে পারেন। এর সুবিধাটি CANVAS
হ'ল, এতে সামগ্রী তৈরি করার জন্য কম ভার্বোস জাভাস্ক্রিপ্ট এপিআই রয়েছে।
এখানে একটি উদাহরণ দেওয়া আছে, যা দেখায় যে আপনি অনুরূপ ফলাফল অর্জন করতে পারেন তবে জাভাস্ক্রিপ্টে এটি কীভাবে করবেন তা খুব আলাদা।
(function () {
const ns='http://www.w3.org/2000/svg';
let s = document.querySelector('svg');
let p = document.createElementNS (ns, 'path');
p.setAttribute ('id', 'arc');
p.setAttribute ('d', 'M 0.9 -0.9 a 0.8,0.4 -10 0,0 -0.9,0.9');
s.appendChild (p);
let u = document.createElementNS (ns, 'use');
u.setAttribute ('href', '#arc');
u.setAttribute ('transform', 'rotate(180)');
s.appendChild (u);
})();
(function () {
let c = document.querySelector('canvas');
let w = c.width = c.clientWidth;
let h = c.height = c.clientHeight;
let x = c.getContext('2d');
x.lineWidth = 0.05 * w;
x.moveTo (w/2, h/2);
x.bezierCurveTo (w*0.02, h*0.4,
w*0.4, -h*0.02,
w*0.95, h*0.05);
x.moveTo (w/2, h/2);
x.bezierCurveTo (w*(1-0.02), h*(1-0.4),
w*(1-0.4), h*(1+0.02),
w*(1-0.95), h*(1-0.05));
x.stroke();
})();
svg, canvas {
width: 3em;
height: 3em;
}
svg {
vertical-align: text-top;
stroke: black;
stroke-width: 0.1;
fill: none;
}
canvas {
vertical-align: text-bottom;
}
div {
float: left;
}
<div><svg viewBox="-1 -1 2 2"></svg>VG</div>
<div>CANVA<canvas></canvas></div>
আপনি দেখতে পাচ্ছেন ফলাফল প্রায় একই, তবে জাভাস্ক্রিপ্ট কোড সম্পূর্ণ আলাদা।
এসওজি createElement
, setAttribute
এবং এটি ব্যবহার করে ডোম এপিআই দিয়ে তৈরি করা হয়েছে appendChild
। সমস্ত গ্রাফিকগুলি বৈশিষ্ট্যযুক্ত স্ট্রিংগুলিতে রয়েছে। এসভিজির আরও শক্তিশালী আদিম রয়েছে। উদাহরণস্বরূপ ক্যানভাসের এসভিজি আর্ক পাথের সমতুল্য কিছুই নেই। ক্যানভাস উদাহরণটি বেজিয়ার কার্ভ দিয়ে এসভিজি আরকে অনুকরণ করার চেষ্টা করে। এসভিজিতে আপনি উপাদানগুলিকে রূপান্তর করতে পুনরায় ব্যবহার করতে পারেন। ক্যানভাসে আপনি উপাদানগুলি পুনরায় ব্যবহার করতে পারবেন না। পরিবর্তে আপনাকে একবারে এটি কল করার জন্য আপনাকে একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে। এসভিজির একটি রয়েছে viewBox
যা সাধারণীকৃত স্থানাঙ্কগুলি ব্যবহার করতে দেয় যা ঘূর্ণনকে সহজ করে। ক্যানভাসে আপনাকে clientWidth
এবং এর উপর ভিত্তি করে নিজেকে স্থানাঙ্কগুলি গণনা করতে হবেclientHeight
। এবং আপনি CSS সহ সমস্ত এসভিজি উপাদানগুলিকে স্টাইল করতে পারেন। ক্যানভাসে আপনি সিএসএস দিয়ে কিছু স্টাইল করতে পারবেন না। এসভিজি একটি ডোম হওয়ায় আপনি সমস্ত এসভিজি উপাদানগুলিতে ইভেন্ট হ্যান্ডলারগুলি নির্ধারণ করতে পারেন। ক্যানভাসের উপাদানগুলির কোনও ডিওএম এবং কোনও ডিওএম ইভেন্ট হ্যান্ডলার নেই।
তবে অন্যদিকে কানভাস কোডটি পড়া অনেক সহজ। আপনার এক্সএমএল নামের স্থানগুলি সম্পর্কে যত্ন নেওয়া প্রয়োজন। এবং আপনি সরাসরি গ্রাফিক্স ফাংশনগুলি কল করতে পারেন, কারণ আপনার কোনও ডিওএম তৈরি করার দরকার নেই।
পাঠটি স্পষ্ট: আপনি যদি দ্রুত কিছু গ্রাফিক্স আঁকতে চান তবে ক্যানভাস ব্যবহার করুন। আপনার যদি গ্রাফিকগুলি ভাগ করে নেওয়া দরকার, তবে এটি সিএসএসের সাথে স্টাইল করতে পছন্দ করুন বা আপনার গ্রাফিকগুলিতে DOM ইভেন্ট হ্যান্ডলারগুলি ব্যবহার করতে চান, একটি এসভিজি তৈরি করুন।