程式語言:Javascript
Library:D3
D3 官網
功能:利用 SVG 表現資料
實際原理做法詳解
三種狀態,如上圖
source code 如下
過渡各種變化使用,搭配
Library:D3
D3 官網
功能:利用 SVG 表現資料
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script> <script> var svg = d3.select(selector).append("svg") .attr("width", this.width) .attr("height", this.height) svg.selectAll("circle") .data(data) .enter().append("circle") .attr("cx", function(d) { return d.x; }) .attr("cy", function(d) { return d.y; }) .attr("r", 2.5); </script>
d3.select(selector)
同 css,也可丟入 function實際原理做法詳解
<script> d3.select("body").selectAll("p") //selection.filter(function(d, i) { return i % 2 === 1; }); selection.select(function(d, i) { return i % 2 === 1 ? this : null; }); </script>
selection.data([values[, key]])
更新 data 跟 element 做連結,且 element 增加一個 property "__data__" 放置 data三種狀態,如上圖
- update:已跟 data 做連結的 element
- enter:未跟 data 做連結的 element
- exit:多出來的 element
<script> var data = [1,2,3,4] var circle = svg.selectAll("circle") .data(data); var circle_key = svg.selectAll("circle") .data(data, function(d) { return d; }); </script>
<script> document.body.__data__ = 42; d3.select('body').datum() // get 42 </script>
selection.enter()
只適用 update selection,例: selection.data 的 回傳值<script>
circle.enter().append("circle")
.attr("r", 2.5);
</script>
selection.exit()
只適用 update selection,例: selection.data 的 回傳值<script> circle.exit().remove(); </script>
selection.datum([value])
類似 data,但不做更新,只處理現有的 datasource code 如下
<script> d3.selection.prototype.datum = function(value) { return arguments.length < 1 ? this.property("__data__") : this.property("__data__", value); }; </script>
selection.classed(name[, value])
selection.style(name[, value[, priority]])
<script> selection.classed('foo bar', true); selection.style({stroke: "black", "stroke-width": "2px"}); </script>
selection.transition([name])
transition.delay([delay])
transition.duration([duration])
transition.ease([value[, arguments]])
參考網站過渡各種變化使用,搭配
- delay (延遲 ms)
- duration (持續 ms)
- ease (如何變化)
<script> d3.selectAll("circle").transition() .duration(750) .delay(function(d, i) { return i * 10; }) .attr("r", function(d) { return Math.sqrt(d * scale); }); </script>
selection.call(function[, arguments…])
用在重覆利用<script> function foo(selection) { selection .attr("name1", "value1") .attr("name2", "value2"); } foo(d3.selectAll("div")); // Or d3.selectAll("div").call(foo); </script>
留言
張貼留言