D3.js: วิธีรับความกว้างและความสูงที่คำนวณสำหรับองค์ประกอบที่กำหนดเอง


120

ฉันต้องการทราบความกว้างและความสูงที่แน่นอนสำหรับgองค์ประกอบที่กำหนดเองในของฉันSVGเพราะฉันต้องวาดเครื่องหมายการเลือกรอบ ๆ เมื่อผู้ใช้คลิกแล้ว

สิ่งที่ฉันเคยเห็นในอินเทอร์เน็ตมีดังนี้: d3.select("myG").style("width"). ปัญหาคือองค์ประกอบจะไม่มีชุดแอตทริบิวต์ความกว้างที่ชัดเจนเสมอไป ตัวอย่างเช่นเมื่อฉันสร้างวงกลมภายในวงกลมgจะมีชุด radious ( r) แทนความกว้าง แม้ว่าฉันจะใช้window.getComputedStyleเมธอดบน a circleมันจะส่งกลับ "อัตโนมัติ"

มีวิธีการคำนวณความกว้างของพลที่svgselement ในD3?

ขอบคุณ.

คำตอบ:


225

สำหรับองค์ประกอบ SVG

ใช้บางอย่างเช่นselection.node().getBBox()คุณจะได้รับค่าเช่น

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

สำหรับองค์ประกอบ HTML

ใช้ selection.node().getBoundingClientRect()


36
สำหรับองค์ประกอบ HTML ใช้getBoundingClientRect()แทนของ getBBox()SVG ดังนี้:d3.select("body").node().getBoundingClientRect().width
Toph

1
สามารถทำได้ด้วยข้อมูลเพิ่มเติมเล็กน้อยเพื่อช่วย สำหรับองค์ประกอบ SVG หรือหรือ HTML? เป็นเฉพาะ Firefox ที่เป็นปัญหาหรือไม่? มีรายงานอะไรในคอนโซลหรือไม่ มูลค่าที่ส่งคืนคืออะไร? คุณมีตัวอย่างโค้ดขั้นต่ำ (jsfiddle) ที่แสดงให้เห็นถึงปัญหาหรือไม่?
Christopher Hackett

29

.getBoundingClientRect ()ส่งคืนขนาดขององค์ประกอบและตำแหน่งที่สัมพันธ์กับวิวพอร์ตเราสามารถติดตามได้อย่างง่ายดาย

  • ซ้ายขวา
  • ด้านบนด้านล่าง
  • สูงกว้าง

ตัวอย่าง:

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

1

เมื่อฉันประสบกับปัญหาเมื่อฉันไม่รู้ว่าองค์ประกอบใดที่เก็บไว้ในตัวแปรของฉัน (svg หรือ html) แต่ฉันต้องการรับความกว้างและความสูง ฉันสร้างฟังก์ชั่นนี้และต้องการแบ่งปัน:

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;
}

การสาธิตเล็กน้อยในตัวอย่างข้อมูลที่ซ่อนอยู่ด้านล่าง เราจัดการคลิกที่ div สีน้ำเงินและบนวงกลม svg สีแดงด้วยฟังก์ชันเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.