D3.js - Zooming API
การซูมช่วยในการปรับขนาดเนื้อหาของคุณ คุณสามารถมุ่งเน้นไปที่พื้นที่ใดภูมิภาคหนึ่งโดยใช้วิธีการคลิกและลาก ในบทนี้เราจะพูดถึง Zooming API โดยละเอียด
การกำหนดค่า API
คุณสามารถโหลด Zooming API ได้โดยตรงจาก“ d3js.org” โดยใช้สคริปต์ต่อไปนี้
<script src = "https://d3js.org/d3-color.v1.min.js"></script>
<script src = "https://d3js.org/d3-dispatch.v1.min.js"></script>
<script src = "https://d3js.org/d3-ease.v1.min.js"></script>
<script src = "https://d3js.org/d3-interpolate.v1.min.js"></script>
<script src = "https://d3js.org/d3-selection.v1.min.js"></script>
<script src = "https://d3js.org/d3-timer.v1.min.js"></script>
<script src = "https://d3js.org/d3-transition.v1.min.js"></script>
<script src = "https://d3js.org/d3-drag.v1.min.js"></script>
<script src = "https://d3js.org/d3-zoom.v1.min.js"></script>
<body>
<script>
</script>
</body>
วิธีการซูม API
ต่อไปนี้เป็นวิธีการซูม API ที่ใช้บ่อยที่สุด
- d3.zoom()
- zoom(selection)
- zoom.transform (การเลือกการแปลง)
- zoom.translateBy (การเลือก, x, y)
- zoom.translateTo (การเลือก, x, y)
- zoom.scaleTo (การเลือก, k)
- zoom.scaleBy (การเลือก, k)
- zoom.filter([filter])
- zoom.wheelDelta([delta])
- zoom.extent([extent])
- zoom.scaleExtent([extent])
- zoom.translateExtent([extent])
- zoom.clickDistance([distance])
- zoom.duration([duration])
- zoom.interpolate([interpolate])
- zoom.on (ชื่อพิมพ์ [, ผู้ฟัง])
ให้เราดูวิธีการ Zooming API ทั้งหมดโดยสังเขป
d3.zoom ()
มันสร้างพฤติกรรมการซูมใหม่ เราสามารถเข้าถึงได้โดยใช้สคริปต์ด้านล่าง
<script>
var zoom = d3.zoom();
</script>
ซูม (การเลือก)
ใช้เพื่อใช้การแปลงการซูมกับองค์ประกอบที่เลือก ตัวอย่างเช่นคุณสามารถสร้างอินสแตนซ์พฤติกรรม mousedown.zoom โดยใช้ไวยากรณ์ต่อไปนี้
selection.call(d3.zoom().on("mousedown.zoom", mousedowned));
zoom.transform (การเลือกการแปลง)
ใช้เพื่อตั้งค่าการแปลงการซูมปัจจุบันขององค์ประกอบที่เลือกเป็นการแปลงที่ระบุ ตัวอย่างเช่นเราสามารถรีเซ็ตการแปลงการซูมเป็นการแปลงข้อมูลประจำตัวโดยใช้ไวยากรณ์ด้านล่าง
selection.call(zoom.transform, d3.zoomIdentity);
นอกจากนี้เรายังสามารถรีเซ็ตการแปลงการซูมเป็นการแปลงเอกลักษณ์เป็นเวลา 1,000 มิลลิวินาทีโดยใช้ไวยากรณ์ต่อไปนี้
selection.transition().duration(1000).call(zoom.transform, d3.zoomIdentity);
zoom.translateBy (การเลือก, x, y)
ใช้เพื่อแปลการแปลงการซูมปัจจุบันขององค์ประกอบที่เลือกด้วยค่า x และ y คุณสามารถระบุค่าการแปล x และ y เป็นตัวเลขหรือเป็นฟังก์ชันที่ส่งกลับตัวเลข หากมีการเรียกใช้ฟังก์ชันสำหรับองค์ประกอบที่เลือกฟังก์ชันนั้นจะถูกส่งผ่านข้อมูลปัจจุบัน 'd' และดัชนี 'i' สำหรับ DOM โค้ดตัวอย่างถูกกำหนดไว้ด้านล่าง
zoom.translateBy(selection, x, y) {
zoom.transform(selection, function() {
return constrain(this.__zoom.translate(
x = = = "function" ? x.apply(this, arguments) : x,
y = = = "function" ? y.apply(this, arguments) : y
);
}
};
zoom.translateTo (การเลือก, x, y)
ใช้เพื่อแปลการแปลงการซูมปัจจุบันขององค์ประกอบที่เลือกไปยังตำแหน่งที่ระบุของ x และ y
zoom.scaleTo (การเลือก, k)
ใช้เพื่อปรับขนาดการเปลี่ยนแปลงการซูมปัจจุบันขององค์ประกอบที่เลือกเป็น k. ที่นี่k เป็นตัวคูณมาตราส่วนที่ระบุเป็นตัวเลขหรือฟังก์ชัน
zoom.scaleTo = function(selection, k) {
zoom.transform(selection, function() {
k = = = "function" ? k.apply(this, arguments) : k;
});
};
zoom.scaleBy (การเลือก, k)
ใช้เพื่อปรับขนาดการแปลง zoon ปัจจุบันขององค์ประกอบที่เลือกโดย k. ที่นี่k เป็นตัวคูณมาตราส่วนที่ระบุเป็นตัวเลขหรือเป็นฟังก์ชันที่ส่งกลับตัวเลข
zoom.scaleBy = function(selection, k) {
zoom.scaleTo(selection, function() {
var k0 = this.__zoom.k,
k1 = k = = = "function" ? k.apply(this, arguments) : k;
return k0 * k1;
});
};
zoom.filter ([ตัวกรอง])
ใช้เพื่อตั้งค่าตัวกรองเป็นฟังก์ชันที่ระบุสำหรับลักษณะการซูม หากไม่ได้ระบุตัวกรองจะส่งกลับตัวกรองปัจจุบันตามที่แสดงด้านล่าง
function filter() {
return !d3.event.button;
}
zoom.wheelDelta ([เดลต้า])
คุณค่าของ Δถูกส่งกลับโดยฟังก์ชันเดลต้าล้อ หากไม่ได้ระบุเดลต้าจะส่งคืนฟังก์ชันเดลต้าวงล้อปัจจุบัน
zoom.extent ([ขอบเขต])
ใช้เพื่อกำหนดขอบเขตของจุดอาร์เรย์ที่ระบุ หากไม่ได้ระบุขอบเขตจะส่งกลับตัวเข้าถึงขอบเขตปัจจุบันซึ่งมีค่าเริ่มต้นเป็น [[0, 0], [กว้าง, สูง]] โดยที่ width คือความกว้างไคลเอนต์ขององค์ประกอบและความสูงคือความสูงของไคลเอ็นต์
zoom.scaleExtent ([ขอบเขต])
ใช้เพื่อกำหนดขอบเขตมาตราส่วนให้กับอาร์เรย์ของตัวเลขที่ระบุ [k0, k1] ที่นี่k0คือสเกลแฟกเตอร์ขั้นต่ำที่อนุญาต ในขณะที่k1คือค่ามาตราส่วนสูงสุดที่อนุญาต หากไม่ได้ระบุขอบเขตจะส่งคืนขอบเขตมาตราส่วนปัจจุบันซึ่งมีค่าเริ่มต้นเป็น [0, ∞] พิจารณาโค้ดตัวอย่างที่กำหนดไว้ด้านล่าง
selection
.call(zoom)
.on("wheel", function() { d3.event.preventDefault(); });
ผู้ใช้สามารถลองซูมโดยการหมุนเมื่อถึงขีด จำกัด ที่สอดคล้องกันของขอบเขตขนาด หากเราต้องการป้องกันการเลื่อนในการป้อนข้อมูลล้อโดยไม่คำนึงถึงขอบเขตของขนาดให้ลงทะเบียนตัวฟังเหตุการณ์ล้อเพื่อป้องกันพฤติกรรมเริ่มต้นของเบราว์เซอร์
zoom.translateExtent ([ขอบเขต])
หากมีการระบุขอบเขตจะกำหนดขอบเขตการแปลเป็นอาร์เรย์ของจุดที่ระบุ หากไม่ได้ระบุขอบเขตจะคืนค่าขอบเขตการแปลปัจจุบันซึ่งมีค่าเริ่มต้นเป็น [[-∞, -∞], [+ ∞, + ∞]]
zoom.clickDistance ([ระยะทาง])
วิธีนี้ใช้เพื่อกำหนดระยะทางสูงสุดที่พื้นที่ที่สามารถซูมได้จะเลื่อนไปมาระหว่างขึ้นและลงซึ่งจะทำให้เกิดเหตุการณ์คลิกตามมา
zoom.duration ([ระยะเวลา])
วิธีนี้ใช้เพื่อกำหนดระยะเวลาสำหรับการเปลี่ยนการซูมเมื่อดับเบิลคลิกและแตะสองครั้งไปที่จำนวนมิลลิวินาทีที่ระบุและส่งกลับลักษณะการซูม หากไม่ได้ระบุระยะเวลาจะส่งคืนระยะเวลาปัจจุบันซึ่งมีค่าเริ่มต้นเป็น 250 มิลลิวินาทีซึ่งกำหนดไว้ด้านล่าง
selection
.call(zoom)
.on("dblclick.zoom", null);
zoom.interpolate ([interpolate])
วิธีนี้ใช้เพื่อสอดแทรกสำหรับการเปลี่ยนการซูมไปยังฟังก์ชันที่ระบุ หากไม่ได้ระบุ interpolate จะส่งกลับค่าโรงงานการแก้ไขปัจจุบันซึ่งมีค่าเริ่มต้นเป็น d3.interpolateZoom
zoom.on (ชื่อพิมพ์ [, ผู้ฟัง])
หากระบุ Listener จะตั้งค่าตัวฟังเหตุการณ์สำหรับชื่อประเภทที่ระบุและส่งกลับลักษณะการซูม ชื่อพิมพ์คือสตริงที่มีชื่อพิมพ์อย่างน้อยหนึ่งชื่อคั่นด้วยช่องว่าง ชื่อพิมพ์แต่ละชื่อคือประเภท (ไม่บังคับ) ตามด้วยจุด (.) และชื่อเช่น zoom.one และ zoom.second ชื่อนี้อนุญาตให้ลงทะเบียนผู้ฟังหลายคนสำหรับประเภทเดียวกัน ประเภทนี้ต้องเป็นแบบใดแบบหนึ่งต่อไปนี้ -
Start - หลังจากเริ่มการซูม (เช่นบนเมาส์)
Zoom - หลังจากเปลี่ยนการซูม (เช่นบน mousemove)
End - หลังจากสิ้นสุดการซูม (เช่นการวางเมาส์)
ในบทต่อไปเราจะพูดถึง API คำขอต่างๆใน D3.js