zoukankan      html  css  js  c++  java
  • The fundamental knowledge of Node JS.

    D3 JS
    Java scirpt is an awesome language for Internface Design.
    All Obejcts in JavaScirpt could be used as an argument to pass around.


    Important Objects:
    d3
    var width = 500;
    var height = 500;


    svg obeject:
    var canvas = d3.select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height);


    array:
    var dataArray = [20, 40, 50, 60]
    ...
    var bars = canvas.selectAll("rect")
    .data(dataArray) //traverse over the array
    .enter()
    .append("rect")
    .attr("width", function(d) {return d}) //note the annoymos function
    .attr("height", 50)
    .attr("y", function(d, i) {return i * 100});

    scale:
    var widthScale = d3.scale.linear()
    .domain([0, 60])
    .range([0, width]);

    var color = d3.scale.linear()
    .domain([0, 60])
    .range(["read", "blue"])

    var bars = canvas.selectAll("rect")
    .data(dataArray) //traverse over the array
    .enter()
    .append("rect")
    .attr("width", function(d) {return widthScale(d)}) //note the annoymos function
    .attr("height", 50)
    .attr("y", function(d, i) {return i * 100});



    group: (group some svg objects together, and mainpulat on all elements of the group)

    var canvas = d3.select("body")
    .append("svg")
    .attr("width", width)
    .attr("height", height);
    .append("g")
    .attr("transform", "translate(20, 0)")

    The three important states when binding data elements with DOM elements
    DOM elements(rect, circle)
    Data elements(xArray = [1, 2, 3, 5, 7])
    The beautiful: mainpulate the DOM elements through the data elements

    Three states:(when binding) for each DOM element and data element
    1. DOM elements :< data elements (enter) : for the data element that do not bond to a DOM element
    2. DOM elements :> data elements (exit) : for the DOM element that do not bond to a data element
    3. DOM elements := data elements (update) : the element justly bond to a DOM element

    Example:
    var data = [10, 20];
    var canvas = d3.select("body")
    .append("svg")
    .attr("width", 500)
    .attr("height", 500)

    update state and enter state:
    var circle1 = canvas.append("circle")
    .attr("cx", 50)
    .attr("cy", 100)
    .attr("r", 25)

    var circles = canvas.selectAll("circle") //select all circles
    .data(data)
    .attr("fill", "red") // for data element "10" and circle1
    .enter() // for data element "20"
    .append("circle")
    .attr("cx", 50)
    .attr("cy", 50)
    .attr("fill", "green")
    .attr("r", 25);


    Update state and exit state:
    var data = [10];
    var canvas = d3.select("body")
    .append("svg")
    .attr("width", 500)
    .attr("height", 500)

    var circle1 = canvas.append("circle")
    .attr("cx", 50)
    .attr("cy", 100)
    .attr("r", 25)

    var circle2 = canvas.append("circle")
    .attr("cx", 50)
    .attr("cy", 200)
    .attr("r", 25)

    var circles = canvas.selectAll("circle") //select all circles
    .data(data)
    .attr("fill", "red") // for data element "10" and circle1
    .exit() // for circle2
    .attr("fill", "blue")


    Animation effects: Using transition

    var canvas = d3.select("body")
    .append("svg")
    .attr("width", 500)
    .attr("height", 500)

    var circle = cavas.append("circle")
    .attr("cx", 50)
    .attr("cy", 50)
    .attr("r", 25)

    circle.transition()
    .duration(1500)
    .attr("cx", 150)
    .transition()
    .attr("cy", 200)
    .transition()
    .attr("cx", 50)

    Add event listener for animation:

    circle.transition()
    .duration(1500)
    .attr("cx", 150)
    .each("end", function() {d3.select(this).attr("fill", "red")})
    //when the transition is over, change color


    Loading External data (use properly with call back mechanism)


    //when the load process finished, the "data" would be passed into the function
    d3.json("mydata.json", function (data)) {
    //the critical part is to understand how arguments were passed around
    var canvas = d3.select("body").append("svg")
    .attr("width", 500)
    .attr("height", 500)

    canvas.selectAll("rect")
    .data(data)
    .enter()
    .append("rect")
    .attr("width", function(d) { return d.age * 10; })
    .attr("height", 50)
    .attr("y", function(d, i) { return i * 50;})
    .attr("fill", "blue")

    canvas.selectAll("text")
    .data(data)
    .enter()
    .append("text")
    .attr("fill", "white")
    .attr("y", function (d, i) { return i * 50; })
    .text(function (d) {return d.name; })
    }}


    The powerfull "Path" Componet in D3.JS

    var canvas = d3.select("body").append("svg")
    .attr("width", 500)
    .attr("height", 500)

    var data = [
    {x: 10, y: 20},
    {x: 40, y: 60},
    {x: 50, y: 70}
    ];

    var group = canvas.append("g") //create a group over the canvas
    .attr("transform", "translate(100, 100)");

    var line = d3.svg.line()
    .x(function (d) { return d.x; })
    .y(function (d) { return d.y; })

    group.selectAll("path")
    .data([data]) //pass in as only one array
    .enter()
    .append("path")
    .attr("d", line) //directly pass the data array to constract line.
    .attr("fill", "none")
    .attr("stroke", "#000")
    .attr("stroke-width", 10);


    The powerful "Arc" Componet in D3.JS

    var canvas = d3.select("body").append("svg")
    .attr("width", 500)
    .attr("height", 500)

    var group = canvas.append("g")
    .attr("transform", "translate(100, 100)");

    var r = 100;
    var p = Math.PI * 2;

    var arc = d3.svg.arc()
    .innerRadius(r - 20)
    .outerRadius(r)
    .startAngle(0)
    .endAngle(p);

    group.append("path")
    .attr("d", arc)


    Layout: D3JS has provieded convenient libraires for converting a number/array into a layout object(array).
    Combine group, component and layout to create an awesome work.
    ***How to refer a group is very very important!
    1. create container(document componet with proper group)
    2. prepare data by using proper layout function
    3. bind the data with container

    var data = [10, 50, 80];
    var r = 300;

    var color = d3.scale.ordinal()
    .range(["red", "blue", "orange"]);

    var canvas = d3.select("body").append("svg")
    .attr("width", 1500)
    .attr("height", 1500);

    var group = canvas.append("g") //create the canvas group
    .attr("transform", "translate(300, 300)");

    var arc = d3.svg.arc()
    .innerRadius(200)
    .outerRadius(r);

    //convert the passed in array into into the objects for creating arc
    var pie = d3.layout.pie()
    .value(function (d) { return d; });

    var arcs = group.selectAll(".arc")
    .data(pie(data))
    .enter()
    .append("g") //each arc is a group in the arcs group
    .attr("class", "arc");


    //note here, we use arcs to refer all arc contains in the arcs
    //the same execution would be performed over all arcs
    arcs.append("path")
    .attr("d", arc) //we use arc as passed in object to constract the path
    .attr("full", function (d) { return color(d.data);});

    arcs.append("text")
    .attr("transform", function(d) {return "translate(" + arc.centroid(d) +")"})
    .attr("text-anchor", "middle")
    .attr("front-size", "1.5em")
    .text(function (d) {return d.data;});

    The Tree Layout:
    //Path could be used to create any sharp

    var canvas = d3.select("body").append("svg")
    .attr("width", 500)
    .attr("height", 500);

    var diagonal = d3.svg.diagonal()
    .source({x: 10, y: 10})
    .target({x: 300, y: 300});

    canvas.append("path")
    .attr("fill", "none")
    .attr("stroke", "black")
    .attr("d", digonal) //all use pass as container, but depict based on passed in object

  • 相关阅读:
    zoj 3820 Building Fire Stations(树上乱搞)
    wxWidgets+wxSmith版电子词典
    Android异步载入全解析之IntentService
    HDU 3832 Earth Hour(最短路)
    Android 应用程序窗口显示状态操作(requestWindowFeature()的应用)
    HighChart学习-更新数据data Series与重绘
    sar使用说明
    xcode多target
    Creating Contextual Menus创建上下文菜单
    安卓开发11:操作控件
  • 原文地址:https://www.cnblogs.com/airwindow/p/4382659.html
Copyright © 2011-2022 走看看