D3.js - ภาพเคลื่อนไหว
D3.js รองรับภาพเคลื่อนไหวตลอดการเปลี่ยนแปลง เราสามารถสร้างแอนิเมชั่นโดยใช้การเปลี่ยนแปลงอย่างเหมาะสม การเปลี่ยนภาพเป็นรูปแบบที่ จำกัดKey Frame Animationมีเพียงสองคีย์เฟรม - เริ่มต้นและสิ้นสุด โดยทั่วไปคีย์เฟรมเริ่มต้นคือสถานะปัจจุบันของ DOM และคีย์เฟรมสิ้นสุดคือชุดของแอตทริบิวต์สไตล์และคุณสมบัติอื่น ๆ ที่คุณระบุ การเปลี่ยนเหมาะอย่างยิ่งสำหรับการเปลี่ยนไปยังมุมมองใหม่โดยไม่มีรหัสที่ซับซ้อนซึ่งขึ้นอยู่กับมุมมองเริ่มต้น
Example - ให้เราพิจารณาโค้ดต่อไปนี้ในหน้า“ transition_color.html”
<!DOCTYPE html>
<html>
<head>
<script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<h3>Simple transitions</h3>
<script>
d3.select("body").style("background-color", "lightblue")
// make the background-color lightblue.transition()
.style("background-color", "gray");
// make the background-color gray
</script>
</body>
</html>
ที่นี่สีพื้นหลังของเอกสารเปลี่ยนจากสีขาวเป็นสีเทาอ่อนจากนั้นเป็นสีเทา
ระยะเวลา () วิธีการ
วิธีการระยะเวลา () ช่วยให้การเปลี่ยนแปลงคุณสมบัติเกิดขึ้นอย่างราบรื่นในช่วงเวลาที่กำหนดแทนที่จะเป็นแบบทันที ให้เราทำการเปลี่ยนแปลงซึ่งใช้เวลา 5 วินาทีโดยใช้รหัสต่อไปนี้
<!DOCTYPE html>
<html>
<head>
<script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<h3>Simple transitions</h3>
<script>
d3.selectAll("h3").transition().style("color","green").duration(5000);
</script>
</body>
</html>
ที่นี่การเปลี่ยนแปลงเกิดขึ้นอย่างราบรื่นและสม่ำเสมอ เรายังสามารถกำหนดค่ารหัสสี RGB ได้โดยตรงโดยใช้วิธีการต่อไปนี้
d3.selectAll("h3").transition().style("color","rgb(0,150,120)").duration(5000);
ตอนนี้หมายเลขสีแต่ละสีจะช้าลงอย่างราบรื่นและสม่ำเสมอจาก 0 ถึง 150 เพื่อให้ได้การผสมระหว่างเฟรมที่ถูกต้องตั้งแต่ค่าเฟรมเริ่มต้นไปจนถึงค่าเฟรมสุดท้าย D3.js ใช้วิธีการสอดแทรกภายใน ไวยากรณ์ได้รับด้านล่าง -
d3.interpolate(a, b)
D3 ยังรองรับประเภทการแก้ไขต่อไปนี้ -
interpolateNumber - รองรับค่าตัวเลข
interpolateRgb - สนับสนุนสี
interpolateString - สตริงการสนับสนุน
D3.js ดูแลโดยใช้วิธี interpolate ที่เหมาะสมและในกรณีขั้นสูงเราสามารถใช้วิธีการ interpolate โดยตรงเพื่อให้ได้ผลลัพธ์ที่ต้องการ เรายังสามารถสร้างวิธีการแก้ไขใหม่ได้หากจำเป็น
วิธีการหน่วงเวลา ()
วิธีการหน่วงเวลา () ช่วยให้การเปลี่ยนแปลงเกิดขึ้นหลังจากช่วงเวลาหนึ่ง พิจารณารหัสต่อไปนี้ใน“ transition_delay.html”
<!DOCTYPE html>
<html>
<head>
<script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<h3> Simple transitions </h3>
<script>
d3.selectAll("h3").transition()
.style("font-size","28px").delay(2000).duration(2000);
</script>
</body>
</html>
วงจรชีวิตของการเปลี่ยนแปลง
การเปลี่ยนแปลงมีวงจรชีวิตสี่ขั้นตอน -
- กำหนดเวลาการเปลี่ยนแปลงแล้ว
- การเปลี่ยนแปลงจะเริ่มขึ้น
- การเปลี่ยนแปลงดำเนินไป
- การเปลี่ยนแปลงสิ้นสุดลง
ให้เราอธิบายทีละข้อโดยละเอียด
กำหนดเวลาการเปลี่ยนแปลง
มีการกำหนดเวลาการเปลี่ยนแปลงเมื่อสร้างขึ้น เมื่อเราโทรselection.transitionเรากำลังจัดกำหนดการการเปลี่ยนแปลง นอกจากนี้ยังเป็นเวลาที่เราโทรattr(), style() และวิธีการเปลี่ยนอื่น ๆ เพื่อกำหนดคีย์เฟรมสิ้นสุด
การเปลี่ยนแปลงเริ่มต้นขึ้น
การเปลี่ยนแปลงจะเริ่มขึ้นตามความล่าช้าซึ่งระบุไว้เมื่อกำหนดเวลาการเปลี่ยนแปลง หากไม่ได้ระบุความล่าช้าการเปลี่ยนแปลงจะเริ่มโดยเร็วที่สุดซึ่งโดยปกติแล้วจะเกิดขึ้นหลังจากผ่านไปไม่กี่มิลลิวินาที
หากการเปลี่ยนแปลงมีความล่าช้าควรตั้งค่าเริ่มต้นเมื่อการเปลี่ยนแปลงเริ่มต้นเท่านั้น เราทำได้โดยฟังเหตุการณ์เริ่มต้น -
d3.select("body")
.transition()
.delay(200)
.each("start", function() { d3.select(this).style("color", "green"); })
.style("color", "red");
การเปลี่ยนแปลงทำงาน
เมื่อการเปลี่ยนแปลงดำเนินไปการเปลี่ยนแปลงจะถูกเรียกซ้ำโดยมีค่าของการเปลี่ยนแปลงตั้งแต่ 0 ถึง 1 นอกเหนือจากความล่าช้าและระยะเวลาการเปลี่ยนยังมีการค่อยๆเปลี่ยนเพื่อควบคุมเวลา การลดเวลาที่บิดเบือนเช่นการเข้าและออกช้า ฟังก์ชันการค่อยๆเปลี่ยนบางฟังก์ชันอาจให้ค่า t มากกว่า 1 หรือน้อยกว่า 0 ชั่วคราว
การเปลี่ยนแปลงสิ้นสุดลง
เวลาสิ้นสุดของการเปลี่ยนแปลงจะเป็น 1 เสมอดังนั้นค่าสิ้นสุดจะถูกกำหนดให้ตรงเมื่อการเปลี่ยนแปลงสิ้นสุดลง การเปลี่ยนแปลงจะสิ้นสุดตามผลรวมของความล่าช้าและระยะเวลา เมื่อการเปลี่ยนแปลงสิ้นสุดลงเหตุการณ์สุดท้ายจะถูกส่งไป