D3.js初體驗(yàn)

在之前的項(xiàng)目里面我們已經(jīng)玩過echarts了绰垂,但它的封裝程度太高了键菱,容我們發(fā)揮的空間不大(但是在做基礎(chǔ)的交互圖表時(shí)十分方便)。所以努溃,今次我們來玩玩強(qiáng)大的D3.js硫嘶,這可謂是近年來最受歡迎的可視化組件了。

D3的自由度非常高梧税,可以提供給玩家們很多想象與發(fā)揮空間沦疾,支持創(chuàng)作多種自定義的圖形。一般玩家在創(chuàng)作復(fù)雜的可視化圖形時(shí)更加傾向使用D3第队。但是其優(yōu)點(diǎn)同時(shí)也是其缺點(diǎn):創(chuàng)作一個(gè)簡單的條形圖也要耗費(fèi)比較多時(shí)間哮塞!

D3 = Data-Driven Documents,數(shù)據(jù)驅(qū)動的文件凳谦。也就是文檔內(nèi)容的生成以及更新等一系列過程是基于數(shù)據(jù)的改變來驅(qū)動的彻桃。
其中有三個(gè)狀態(tài):ENTER-UPDATE-EXIT。簡單解釋一下:ENTER狀態(tài)就是為已有的數(shù)據(jù)添加圖形晾蜘;UPDATE就是更新數(shù)據(jù)與圖形;EXIT就是為根據(jù)數(shù)據(jù)刪去多余的圖形眠屎。以下就是根據(jù)D3這個(gè)基本的運(yùn)行模式來實(shí)現(xiàn)的動態(tài)數(shù)據(jù)更新的例子:(注意D3.js的“函數(shù)即對象”的鏈?zhǔn)綄懛ㄌ藿唬cjQuery類似)

運(yùn)行效果:(每1.5s會更新一次數(shù)據(jù))「鸟茫可見岖常,就話這幾個(gè)條條也需要幾十行的代碼。


<!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8">
        <title>Array as Data</title>
        <script type="text/javascript" src="d3.js"></script>
        <style>
        body{
            font-family: "helvetica";
        }
        .h-bar {
            min-height: 15px;
            min-width: 10px;
            background-color: steelblue;
            margin-bottom: 2px;
            font-size: 11px;
            color: #fff;
            text-align: right;
            padding-right: 2px;
        }
        </style>
    </head>
    
    <body>
        <script type="text/javascript">
        var data = [10, 15, 30, 50, 80, 65, 55, 30, 20, 10, 8];
        
        var dataRange = d3.scale.linear() //創(chuàng)建一個(gè)值域的線性比例尺
        .domain([0,100])
        .range([0,300]);
        
        var colorRange = d3.scale.linear() //創(chuàng)建一個(gè)顏色的線性比例尺
        .domain([0,100])
        .range(["#99CCCC", "#003333"]);
        
        function render(data) { 
        // Enter
            d3.select("body").selectAll("div.h-bar") //“應(yīng)該”選擇第一個(gè)body元素以及其下的類名為"h-bar"的div標(biāo)簽
             .data(data) //綁定數(shù)據(jù)與圖形
             .enter() //進(jìn)入狀態(tài)(增加圖形匹配多余的數(shù)據(jù))
             .append("div") //添加div
              .attr("class","h-bar") //添加類名
              .append("span"); //添加span
        // Update
            d3.select("body").selectAll("div.h-bar") //選擇第一個(gè)body元素以及其下的類名為"h-bar"的div標(biāo)簽
             .data(data) //綁定數(shù)據(jù)與圖形
             .style("width",function(d){
                return dataRange(d) + "px"; //調(diào)用函數(shù)返回與該圖形綁定的數(shù)據(jù)d
             })
             .style("background-color",function(d){
                return colorRange(d); //調(diào)用函數(shù)返回與該圖形綁定的數(shù)據(jù)d
             })
             .select("span")
              .text(function(d){
                return d; //調(diào)用函數(shù)返回與該圖形綁定的數(shù)據(jù)d
             });
        // Exit
            d3.select("body").selectAll("div.h-bar")
             .data(data)
             .exit() //退出狀態(tài)(刪除沒有數(shù)據(jù)的多余的圖形)
              .remove();
        }
        setInterval(function(){
            data.shift(); //刪除數(shù)組的第一個(gè)數(shù)據(jù)
            data.push(Math.round(Math.random() * 100)); //在數(shù)組后增加一個(gè)1-100的隨機(jī)數(shù)
            render(data);
        },1500); //2s執(zhí)行一次
        render(data);
        </script>
    </body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葫督,一起剝皮案震驚了整個(gè)濱河市竭鞍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌橄镜,老刑警劉巖偎快,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洽胶,居然都是意外死亡晒夹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丐怯,“玉大人喷好,你說我怎么就攤上這事《刘危” “怎么了梗搅?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長效览。 經(jīng)常有香客問我无切,道長,這世上最難降的妖魔是什么钦铺? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任订雾,我火速辦了婚禮,結(jié)果婚禮上矛洞,老公的妹妹穿的比我還像新娘洼哎。我一直安慰自己,他們只是感情好沼本,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布噩峦。 她就那樣靜靜地躺著,像睡著了一般抽兆。 火紅的嫁衣襯著肌膚如雪识补。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天辫红,我揣著相機(jī)與錄音凭涂,去河邊找鬼。 笑死贴妻,一個(gè)胖子當(dāng)著我的面吹牛切油,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播名惩,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼澎胡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了娩鹉?” 一聲冷哼從身側(cè)響起攻谁,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弯予,沒想到半個(gè)月后戚宦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锈嫩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年阁苞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了困檩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡那槽,死狀恐怖悼沿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骚灸,我是刑警寧澤糟趾,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站甚牲,受9級特大地震影響义郑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丈钙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一非驮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雏赦,春花似錦劫笙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俏橘,卻和暖如春允华,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寥掐。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工靴寂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人召耘。 一個(gè)月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓百炬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怎茫。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容