国产精品亚洲成在人线_又大又粗又猛免费视频_国产免费福利在线视频_美女禁区A级全片免费观看

您當(dāng)前的位置:首頁 > 新聞資訊 > 產(chǎn)品動(dòng)態(tài) > 正文

【新東網(wǎng)技術(shù)大咖帶你走進(jìn)D3】神奇的D3是個(gè)什么玩意兒

發(fā)布時(shí)間: 2017-01-13 11:31:14  
分享到:

 

文/李壯相 技術(shù)總監(jiān)

 

 

什么是D3
 

 

什么是D3?D3是指數(shù)據(jù)驅(qū)動(dòng)文檔(Data-Driven Documents),根據(jù)D3的官方定義:

 

D3.js是一個(gè)JavaScript庫,它可以通過數(shù)據(jù)來操作文檔。D3可以通過使用HTML、SVG和CSS把數(shù)據(jù)鮮活形象地展現(xiàn)出來。D3嚴(yán)格遵循Web標(biāo)準(zhǔn),因而可以讓你的程序輕松兼容現(xiàn)代主流瀏覽器并避免對(duì)特定框架的依賴。同時(shí),它提供了強(qiáng)大的可視化組件,可以讓使用者以數(shù)據(jù)驅(qū)動(dòng)的方式去操作DOM。(來自:維基百科D3.js詞條)

 

總的來說,D3是這樣一個(gè)特殊的JavaScript庫,它利用現(xiàn)有的Web標(biāo)準(zhǔn),通過更簡(jiǎn)單的(數(shù)據(jù)驅(qū)動(dòng))方式來制作炫目的可視化效果。

 

你可以從官方網(wǎng)站下載一個(gè)在http://d3js.org/下載最新版本的D3.js,然后根據(jù)官方的說明,你可以搭建一個(gè)D3的開發(fā)環(huán)境,我就不細(xì)說了。有意思的是,它對(duì)外界的其他JS庫,是零依賴的。

 

D3能做什么
 

 

D3能做的事情是比較多的,能做很多形形色色的數(shù)據(jù)驅(qū)動(dòng)的圖例,我們可以通過訪問以下網(wǎng)址獲得大量的樣例,連同沒有圖示的,高達(dá)數(shù)千種:

 

https://github.com/d3/d3/wiki/Gallery

 


 

注意看,你會(huì)發(fā)現(xiàn)很多圖例甚至包含了強(qiáng)大的動(dòng)畫效果圖例,是為其強(qiáng)大之處。

 

 

案例說明
 

 

我們可以通過一個(gè)非常簡(jiǎn)單的餅狀圖來做一個(gè)效果還不錯(cuò)的案例:

 
 

以下是部分代碼:

 

 

 

 

 

 

其中Donut3D.js的問題內(nèi)容如下:

 

!function(){

var Donut3D={};

 

function pieTop(d, rx, ry, ir ){

if(d.endAngle - d.startAngle == 0 ) return "M 0 0";

var sx = rx*Math.cos(d.startAngle),

sy = ry*Math.sin(d.startAngle),

ex = rx*Math.cos(d.endAngle),

ey = ry*Math.sin(d.endAngle);

 

var ret =[];

ret.push("M",sx,sy,"A",rx,ry,"0",(d.endAngle-d.startAngle > Math.PI? 1: 0),"1",ex,ey,"L",ir*ex,ir*ey);

ret.push("A",ir*rx,ir*ry,"0",(d.endAngle-d.startAngle > Math.PI? 1: 0), "0",ir*sx,ir*sy,"z");

return ret.join(" ");

}

 

function pieOuter(d, rx, ry, h ){

var startAngle = (d.startAngle > Math.PI ? Math.PI : d.startAngle);

var endAngle = (d.endAngle > Math.PI ? Math.PI : d.endAngle);

 

var sx = rx*Math.cos(startAngle),

sy = ry*Math.sin(startAngle),

ex = rx*Math.cos(endAngle),

ey = ry*Math.sin(endAngle);

 

var ret =[];

ret.push("M",sx,h+sy,"A",rx,ry,"0 0 1",ex,h+ey,"L",ex,ey,"A",rx,ry,"0 0 0",sx,sy,"z");

return ret.join(" ");

}

 

function pieInner(d, rx, ry, h, ir ){

var startAngle = (d.startAngle < Math.PI ? Math.PI : d.startAngle);

var endAngle = (d.endAngle < Math.PI ? Math.PI : d.endAngle);

 

var sx = ir*rx*Math.cos(startAngle),

sy = ir*ry*Math.sin(startAngle),

ex = ir*rx*Math.cos(endAngle),

ey = ir*ry*Math.sin(endAngle);

 

var ret =[];

ret.push("M",sx, sy,"A",ir*rx,ir*ry,"0 0 1",ex,ey, "L",ex,h+ey,"A",ir*rx, ir*ry,"0 0 0",sx,h+sy,"z");

return ret.join(" ");

}

 

function getPercent(d){

return (d.endAngle-d.startAngle > 0.2 ?

Math.round(1000*(d.endAngle-d.startAngle)/(Math.PI*2))/10+'%' : '');

}

 

Donut3D.transition = function(id, data, rx, ry, h, ir){

function arcTweenInner(a) {

  var i = d3.interpolate(this._current, a);

  this._current = i(0);

  return function(t) { return pieInner(i(t), rx+0.5, ry+0.5, h, ir);  };

}

function arcTweenTop(a) {

  var i = d3.interpolate(this._current, a);

  this._current = i(0);

  return function(t) { return pieTop(i(t), rx, ry, ir);  };

}

function arcTweenOuter(a) {

  var i = d3.interpolate(this._current, a);

  this._current = i(0);

  return function(t) { return pieOuter(i(t), rx-.5, ry-.5, h);  };

}

function textTweenX(a) {

  var i = d3.interpolate(this._current, a);

  this._current = i(0);

  return function(t) { return 0.6*rx*Math.cos(0.5*(i(t).startAngle+i(t).endAngle));  };

}

function textTweenY(a) {

  var i = d3.interpolate(this._current, a);

  this._current = i(0);

  return function(t) { return 0.6*rx*Math.sin(0.5*(i(t).startAngle+i(t).endAngle));  };

}

 

var _data = d3.layout.pie().sort(null).value(function(d) {return d.value;})(data);

 

d3.select("#"+id).selectAll(".innerSlice").data(_data)

.transition().duration(750).attrTween("d", arcTweenInner);

 

d3.select("#"+id).selectAll(".topSlice").data(_data)

.transition().duration(750).attrTween("d", arcTweenTop);

 

d3.select("#"+id).selectAll(".outerSlice").data(_data)

.transition().duration(750).attrTween("d", arcTweenOuter);

 

d3.select("#"+id).selectAll(".percent").data(_data).transition().duration(750)

.attrTween("x",textTweenX).attrTween("y",textTweenY).text(getPercent);

}

 

Donut3D.draw=function(id, data, x /*center x*/, y/*center y*/,

rx/*radius x*/, ry/*radius y*/, h/*height*/, ir/*inner radius*/){

 

var _data = d3.layout.pie().sort(null).value(function(d) {return d.value;})(data);

 

var slices = d3.select("#"+id).append("g").attr("transform", "translate(" + x + "," + y + ")")

.attr("class", "slices");

 

slices.selectAll(".innerSlice").data(_data).enter().append("path").attr("class", "innerSlice")

.style("fill", function(d) { return d3.hsl(d.data.color).darker(0.7); })

.attr("d",function(d){ return pieInner(d, rx+0.5,ry+0.5, h, ir);})

.each(function(d){this._current=d;});

 

slices.selectAll(".topSlice").data(_data).enter().append("path").attr("class", "topSlice")

.style("fill", function(d) { return d.data.color; })

.style("stroke", function(d) { return d.data.color; })

.attr("d",function(d){ return pieTop(d, rx, ry, ir);})

.each(function(d){this._current=d;});

 

slices.selectAll(".outerSlice").data(_data).enter().append("path").attr("class", "outerSlice")

.style("fill", function(d) { return d3.hsl(d.data.color).darker(0.7); })

.attr("d",function(d){ return pieOuter(d, rx-.5,ry-.5, h);})

.each(function(d){this._current=d;});

 

slices.selectAll(".percent").data(_data).enter().append("text").attr("class", "percent")

.attr("x",function(d){ return 0.6*rx*Math.cos(0.5*(d.startAngle+d.endAngle));})

.attr("y",function(d){ return 0.6*ry*Math.sin(0.5*(d.startAngle+d.endAngle));})

.text(getPercent).each(function(d){this._current=d;});

}

 

this.Donut3D = Donut3D;

}();

 

 

通過這個(gè)案例,你會(huì)發(fā)現(xiàn),其實(shí)D3需要一定的數(shù)學(xué)功底,當(dāng)然有幸的,D3的官網(wǎng)提供了大量案例,你可以直接調(diào)用就可以了。

 

分享到:
地址:福建省福州市銅盤路軟件大道89號(hào)軟件園A區(qū)26號(hào)樓 電話:0591-83519233 傳真:0591-87882335 E-mail:doone@doone.com.cn
版權(quán)所有 新東網(wǎng)科技有限公司 閩ICP備07052074號(hào)-1 閩公網(wǎng)安備 35010202001006號(hào)
97精品国产一区二区三区| 99久久精品无码一区二区毛片| 1000部拍拍拍18勿入免费视频下载| 人妻 日韩精品 中文字幕| 午夜精品久久久久久久| 毛片免费视频在线观看| 亚洲av午夜福利精品一区二区 | 国产无遮挡无码视频在线观看| 亚洲午夜无码毛片av久久| 男女无遮挡激情视频| 人人妻人人澡人人爽人人精品97| 国产色无码精品视频国产| 国产精品国产三级国产av主播| 亚洲av无码乱码在线观看牲色 | 特黄做受又硬又粗又大视频小说| 强行糟蹋人妻hd中文字| 国产亚洲精久久久久久无码| 国产精品高清网站| 日日碰狠狠躁久久躁蜜桃| 男女裸体影院高潮| 欧美色欧美亚洲另类二区| 亚洲欧美另类久久久精品| 亚洲精品欧美综合四区| av色欲无码人妻中文字幕| 国产成人久久精品77777综合| 性饥渴艳妇性色生活片在线播放| av网站免费线看精品| 日本50岁丰满熟妇xxxx| 久久无码高潮喷水| 国产精品白浆在线观看免费| 毛片免费全部无码播放| 欧美日韩视频在线第一区| 日本肉体xxxx裸交| 欧美奶涨边摸边做爰视频| 久久精品国产精品亚洲毛片| 五月天中文字幕mv在线| 国产福利一区二区三区在线观看 | 性荡视频播放在线视频| 免费无码黄动漫在线观看| 亚洲中文无码av永久| 四虎影视永久免费观看|