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
The fundamental knowledge of Node JS.的更多相关文章
- [转]Getting Start With Node.JS Tools For Visual Studio
		本文转自:http://www.c-sharpcorner.com/UploadFile/g_arora/getting-started-with-node-js-tools-for-visual-s ... 
- A chatroom for all! Part 1 - Introduction to Node.js(转发)
		项目组用到了 Node.js,发现下面这篇文章不错.转发一下.原文地址:<原文>. ------------------------------------------- A chatro ... 
- (翻译)《Hands-on Node.js》—— Introduction
		今天开始会和大熊君{{bb}}一起着手翻译node的系列外文书籍,大熊负责翻译<Node.js IN ACTION>一书,而我暂时负责翻译这本<Hands-on Node.js> ... 
- Base64 Encoding / Decoding in Node.js
		Posted on April 20th, 2012 under Node.js Tags: ASCII, Buffer, Encoding, node.js, UTF So how do you e ... 
- [转]Building a REST-Backend for Angular with Node.js & Express
		本文转自:https://malcoded.com/posts/angular-backend-express Angular is a single page application framewo ... 
- Node.js v7.4.0 Documentation Addons
		https://nodejs.org/docs/latest/api/addons.html Node.js Addons are dynamically-linked shared objects, ... 
- Node.js NPM Tutorial
		Node.js NPM Tutorial – How to Get Started with NPM? NPM is the core of any application that is devel ... 
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
		一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ... 
- 利用Node.js的Net模块实现一个命令行多人聊天室
		1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ... 
随机推荐
- hdu 4622 Reincarnation(后缀数组)
			hdu 4622 Reincarnation 题意:还是比较容易理解,给出一个字符串,最长2000,q个询问,每次询问[l,r]区间内有多少个不同的字串. (为了与论文解释统一,这里解题思路里sa数组 ... 
- linux上传下载软件
			如何实现windows和linux之间的文件传输 (原文地址:http://hi.baidu.com/ying5420/item/439dee93f0f7fd1a934f41e2) 如果想从windo ... 
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
			第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ... 
- codevs 1519 过路费 最小生成树+倍增
			/*codevs 1519 过路费 最小生成树+倍增*/ #include<iostream> #include<cstdio> #include<cstring> ... 
- if 和 swith的选择.
			具体数值不多,而是符合byte short int char这四种类型,建议使用swtich语句.因为效率稍高. 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广. 
- ActionScript:Resampling PCM data
			使用基于flash的麦克风录音,如果想在获取完PCM采样数据后,通过Sound马上回放,必须经过resampling.(注意:如果录音是采用的44KHz的话,则不需要) 因此,需要as实现一个简便的函 ... 
- [转]关于java中的 sychronized 同步方法 与 同步块的理解
			首先,需要说明一点,也是最重要的一点,无论是同步方法 还是 同步块 都是只针对同一个对象的多线程而言的,只有同一个对象产生的多线程,才会考虑到 同步方法 或者是 同步块,如果定义多个实例的同步,可以考 ... 
- 解决vim不能使用方向键和退格键问题
			1.使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母,或者退格键却变成方向键的功能 只要重装一下vi的依赖包即可完美解决vi编辑器方向键变字母的问题.rpm -e vim-enhance ... 
- 【转】 NSString什么时候用copy,什么时候用strong
			原文: http://blog.csdn.net/itianyi/article/details/9018567 大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有 ... 
- iOS、mac开源项目及库汇总
			原文地址:http://blog.csdn.net/qq_26359763/article/details/51076499 iOS每日一记------------之 中级完美大整理 iOS.m ... 
