D3.js: একটি স্বেচ্ছাসেবী উপাদান জন্য গণনা প্রস্থ এবং উচ্চতা কিভাবে পাবেন?


120

আমার এক স্বেচ্ছাসেবী gউপাদানটির প্রস্থ এবং উচ্চতা সম্পর্কে আমার ঠিক জানা দরকার SVGকারণ ব্যবহারকারী একবার ক্লিক করার পরে আমাকে তার চারপাশে একটি নির্বাচন মার্কার আঁকতে হবে।

আমি কি ইন্টারনেটে দেখা করেছি ভালো কিছু হল: d3.select("myG").style("width")। সমস্যাটি হ'ল উপাদানটির সর্বদা সুস্পষ্ট প্রস্থের বৈশিষ্ট্য সেট থাকে না। উদাহরণস্বরূপ, আমি যখন এর ভিতরে একটি বৃত্ত তৈরি করি তখন এর প্রস্থের পরিবর্তে gপ্রদীপ্ত ( r) সেট থাকবে। এমনকি যদি আমি এটিতে window.getComputedStyleপদ্ধতিটি ব্যবহার করি তবে circleএটি "অটো" ফিরে আসবে।

একটি স্বেচ্ছাসেবী svgসেমিমেন্টের প্রস্থ গণনা করার কোনও উপায় কি আছে D3?

ধন্যবাদ.

উত্তর:


225

এসভিজি উপাদানগুলির জন্য

selection.node().getBBox()আপনার মতো কিছু ব্যবহার করে যেমন মান পাওয়া যায়

{
    height: 5, 
    width: 5, 
    y: 50, 
    x: 20
} 

এইচটিএমএল উপাদানগুলির জন্য

ব্যবহার selection.node().getBoundingClientRect()


36
এইচটিএমএল উপাদানগুলির জন্য, getBoundingClientRect()কেবল এসভিজি-এর পরিবর্তে ব্যবহার করুন getBBox()। ভালো লেগেছে:d3.select("body").node().getBoundingClientRect().width
তোফহ

1
সাহায্য করার জন্য আরও কিছু তথ্য দিয়ে করতে পারেন। এসভিজি বা এইচটিএমএল উপাদানগুলির জন্য? এটি কি কেবল ফায়ারফক্সই সমস্যা? কনসোলে কি কিছু রিপোর্ট করা আছে? প্রত্যাবর্তিত মান কী? আপনার কাছে কোনও ন্যূনতম কোড উদাহরণ রয়েছে (jsfiddle) যা সমস্যাটি দেখিয়েছে?
ক্রিস্টোফার হ্যাকেট

29

.getBoundingClientRect () ভিউপোর্টের সাথে সম্পর্কিত কোনও উপাদানটির আকার এবং অবস্থানটি প্রদান করে e আমরা সহজেই নিম্নলিখিত পেতে পারি

  • বাম ডান
  • উপর নিচ
  • উচ্চতা প্রস্থ

উদাহরণ:

var element = d3.select('.elementClassName').node();
element.getBoundingClientRect().width;

1

একবার আমি সমস্যার মুখোমুখি হয়েছি যখন আমি জানতাম না যে বর্তমানে উপাদানটি আমার ভেরিয়েবলের মধ্যে রয়েছে (এসভিজি বা এইচটিএমএল) তবে এটির প্রস্থ এবং উচ্চতা আমার দরকার ছিল needed আমি এই ফাংশনটি তৈরি করেছি এবং এটি ভাগ করতে চাই:

function computeDimensions(selection) {
  var dimensions = null;
  var node = selection.node();

  if (node instanceof SVGElement) { // check if node is svg element
    dimensions = node.getBBox();
  } else { // else is html element
    dimensions = node.getBoundingClientRect();
  }
  console.log(dimensions);
  return dimensions;
}

নীচে লুকানো স্নিপেটে ছোট্ট ডেমো। আমরা একই ফাংশন সহ নীল ডিভি এবং লাল এসভিজি বৃত্তের উপর ক্লিক করি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.