1. 程式人生 > >D3.js 動態資料重新整理檢視詳解

D3.js 動態資料重新整理檢視詳解

在官網有著豐富demo的基礎上,使用d3繪製一副靜態圖表並不是難事。但我們更多的需求是:根據使用者操作動態獲取資料庫中資料,進而重新整理檢視。

最生硬的方法:刪除element,重新繪製;

d3.select('#svgID').remove();   //刪除整個SVG
d3.select('#svgID')
  .selectAll('*')
  .remove();                    //清空SVG中的內容

此方法的確可以做到重新整理檢視的效果。
優點:快準狠!
缺點:
1. 不能實現友好的動畫切換效果
2. 不能保留之前使用者操作的狀態

正確開啟方式
:利用enter/exit更新檢視

先理解enter/exit 二者的作用

這裡寫圖片描述

如上圖所示,簡而言之,enter()是資料超出部分,exit()是圖形多餘部分。
值得注意的是,var div = d3.selectAll('div');其中div是當前存在的div。

所以更新步驟為:

  1. 對已存在的div我們要做的是update操作。
  2. 對空缺的enter()部分做補充操作。
  3. 對多餘的exit()部分執行.remove()
  4. 對更改的動作新增動畫效果,使重新整理更酷炫!

ps: update操作是指根據資料重新整理檢視中的圖形以及文字。

問題1:如果是從DATA(陣列)中刪除資料,其他資料不變,那麼是否需要重新整理操作。
問題同:在刪除資料的時候,為什麼介面中的圖形在“亂跑”o(╯□╰)o。
解答:必須要!

下文介紹一下d3的data()

#正確理解d3.js中.data(),資料與檢視繫結原理。

d3.js中的.data()是元素集合與資料集合的對映。如下圖所示:
這裡寫圖片描述

我們可以看到圖中的div2此時對應的資料應該是data3,檢視與資料不一致,所以需要更新檢視。

假設我們做的是如下程式碼的資料更新

var data = [1,2,3,4];
var div = d3.selectAll('div').data(data);
div.enter()
   .append('div')
   .text(function(d){return d;});
//刪除2
var
newData = [1,3,4] div = d3.selectAll('div').data(newData); //刪除多餘元素 div.exit().remove();

這裡寫圖片描述

可以發現元素被刪除的不是我們所期望被刪除的元素。我們刪除資料2的時候,使用exit()刪除的元素卻是佇列的最後一個元素。

所以建議將重新整理檢視封裝為方法,方便隨時呼叫。

相關推薦

D3.js 動態資料重新整理檢視

在官網有著豐富demo的基礎上,使用d3繪製一副靜態圖表並不是難事。但我們更多的需求是:根據使用者操作動態獲取資料庫中資料,進而重新整理檢視。 最生硬的方法:刪除element,重新繪製; d3.select('#svgID').remove();

D3.js中Radial Cluster Dendrogram

Radial Cluster Dendrogram 上一篇聊了Cluster Dendrogram,這一篇對照著聊一聊Radial Cluster Dendrogram. “radial”意思為放射狀的,因此,估計你也能猜到Radial Cluster Den

js入門 關於js屬性及其資料型別(

1. js的本質就是處理資料。資料來自於後臺的資料庫。 所以變數就起到一個臨時儲存資料的作用。 ECMAScript制定了js的資料型別。 資料型別有哪些? 1. 字串   String 2. 數字    Number

資料結構與算法系列2 線性表 使用java實現動態陣列+ArrayList原始碼

## 資料結構與算法系列2 線性表 使用java實現動態陣列+ArrayList原始碼詳解 對陣列有不瞭解的可以先看看我的另一篇文章,那篇文章對陣列有很多詳細的解析,而本篇文章則著重講動態陣列,另一篇文章連結如下,可點選跳轉: 連結:[https://blog.csdn.net/pjh88/article/d

(轉)Arcgis for Js之Graphiclayer擴展

不同的 nes library 創建 都是 拖拽 oms hang graph http://blog.csdn.net/gisshixisheng/article/details/41208185 在前兩節,講到了兩種不同方式的聚類,一種是基於距離的,一種是基於區域範圍

Vue.js 運行環境搭建(基於windows的手把手安裝教學)及vue、node基礎知識普及

頁面 沒有 全能 服務器程序 重載 帶來 size 耐心 編程   Vue.js 是一套構建用戶界面的漸進式框架。他自身不是一個全能框架——只聚焦於視圖層。因此它非常容易學習,非常容易與其它庫或已有項目整合。在與相關工具和支持庫一起使用時,Vue.j

js變量類型

har () name def -type js對象 arr ray blog <html> <title>js變量類型詳解</title> <meta http-equiv="content-type" content="t

JS數組定義及

多維 wan bsp 數據類型 長度 內存地址 函數 js數組 obj 1、什麽是數組 數組就是一組數據的集合 其表現形式就是內存中的一段連續的內存地址 數組名稱其實就是連續內存地址的首地址 2、關於js中的數組特點 數組定義時無需指定數據類型 數組定義時可以無需指定數

JS變量對象

需要 如何 這樣的 表示 上下 但是 分享 它的 屬性。 JS變量對象詳解 開年之後工作熱情一直不是很高,這幾天一直處於消極怠工狀態。早上不想起床,起床了不想上班。明明放假之前工作熱情還一直很高,一直心心念念的想把小程序項目懟出來,結果休假回來之後畫風完全不一樣了。我

js的import 與export

node 直接 console 路徑 java strong tro {} 匿名函數 ES6 1.export default 其他模塊加載該模塊時,import命令可以為該匿名函數指定任意名字。 如: import Vue from ‘vue‘ vue裏面的第三方模塊

HTML 的 attribute 和 JS 的 property 的異同

同樣是獲得 element 的 style 屬性,有兩種方式 el.style 和 el.getAttribute(‘style’) 。前者我們叫 style 是 el 的 property ,後者我們叫style 是 el 的 attribute。 attribute attrib

在 Angular6 中使用 HTTP 請求服務端資料的步驟

第一步 準備好api介面地址, 例如 https://api.example.com/api/ 第二步 在根元件 app.components.ts 中引入 HttpClientModule 模組。 ? 1 2 3 4 5 6 7

D3.js 基於資料的繪圖

繪製直線圖 條形圖實際上是矩形,而 HTML 的 div 元素是繪製矩形的最簡單手段。(對於瀏覽器來說,HTML 中的一切元素都可以喲ing來表示矩形)。 所以我們可以定義一個叫 bar 的 div 類,用於存放圖表的公共屬性。(除了高度,其他的屬性應該是共享的) div.bar {

母牛的故事(hdoj 2018,動態規劃遞推,)

有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請程式設計實現在第n年的時候,共有多少頭母牛? Sample Input2450Sample Output246 //本程式碼為只輸入一組資料的答案 //方法1:找規律找出來a[i]=a[i-1]+a[i-3]

MOOC課程資訊D3.js動態視覺化

版權宣告:本文為博主原創文章,轉載 請註明出處:https://blog.csdn.net/sc2079/article/details/83153693 - 寫在前面   好久沒更新部落格了,主要還是最近太忙了。很久之前就看到B站上動態柱狀圖圖表(用D3.js做的),詳情見@

Django 中類檢視

在寫檢視的時候,Django除了使用函式作為檢視,也可以使用類作為檢視。使用類檢視可以使用類的一些特性,比如繼承等。 View檢視: django.views.generic.base.View是主要的類檢視,所有的類檢視都是繼承自他。如果我們寫自己的類檢視,也可以繼承自他。然後再根

Spring cache資料(二 ,)

Spring Cache 介紹 2015-01-05 01:45 by Rollen Holt, 7781 閱讀, 8 評論, 收藏, 編輯 Spring Cache 快取是實際工作中非常常用的一種提高

js事件監聽器用法例項

本文例項講述了js事件監聽器用法。分享給大家供大家參考。具體分析如下: 1、當同一個物件使用.onclick的寫法觸發多個方法的時候,後一個方法會把前一個方法覆蓋掉,也就是說,在物件的onclick事件發生時,只會執行最後繫結的方法。而用事件監聽則不會有覆蓋的現象,每個繫結的事件都會被執行。

tensorflow的資料讀取機制

人工智慧/機器學習/深度學習交流QQ群:116270156 tensorflow的資料讀取機制詳解 tf.train.slice_input_producer tf.train.batch 最後 T

Redis rdb資料結構 原始碼

記錄下來以後方便回憶,需要時隨時翻閱 一、Redis  RDB檔案的資料結構  二、Redis  RDB檔案的十六進位制碼和對應的字元   三、Redis  save和bgsave命令處理過程