欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

D3.js入門之D3?DataJoin的使用

 更新時間:2022年11月08日 09:18:05   作者:FinGet  
DataJoin(數(shù)據(jù)連接)是D3中很重要的一個概念。D3是基于數(shù)據(jù)操作DOM的js庫,DataJoin使我們能夠根據(jù)現(xiàn)有?HTML?文檔中的數(shù)據(jù)集注入、修改和刪除元素。本文主要和大家詳細聊聊DataJoin的使用,感興趣的可以學(xué)習(xí)一下

DataJoin(數(shù)據(jù)連接)是D3中很重要的一個概念。上一章有提到D3是基于數(shù)據(jù)操作DOM的js庫,DataJoin使我們能夠根據(jù)現(xiàn)有 HTML 文檔中的數(shù)據(jù)集注入、修改和刪除元素。

上一章中我們用forEach循環(huán)的方式,畫了三個圓,那么在D3中該怎樣優(yōu)雅的處理呢?

const circles = [
    { text: 1, color: "red" },
    { text: 2, color: "green" },
    { text: 3, color: "blue" }
];

svg.selectAll("circle")
    .data(circles) // 綁定數(shù)據(jù)
    .enter() // 獲取有數(shù)據(jù)沒dom的集合
    .append("circle")
    .attr("class", "circle")
    .attr("id", (d) => `circle${d.text}`) // d 表示 data綁定的數(shù)據(jù)中的一項
    .attr("cx", (d) => 50 * d.text)
    .attr("cy", 50)
    .attr("r", 20)
    .attr("fill", (d) => d.color);

data、enter、exit

  • data 將指定數(shù)組的數(shù)據(jù) data 與已經(jīng)選中的元素進行綁定并返回一個新的選擇集和enter 和 exit
  • enter 返回選擇集中有數(shù)據(jù)但沒有對應(yīng)的DOM元素
  • exit 選擇集中有DOM元素但沒有對應(yīng)的數(shù)據(jù)

<div id="dataEnter">
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
</div>
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

const update = d3.select("#dataEnter")
  .selectAll("p")
  .data(arr)
  .text((d) => d);

因為有5個p標簽,所以從1開始渲染到5。

enter返回的是有數(shù)據(jù)沒有dom的集合,也就是數(shù)據(jù)比dom多,所以enterappend基本上都是成對出現(xiàn)的。

d3.select("#dataEnter")
  .selectAll("p")
  .data(arr)
  .enter()
  .append("p")
  .text((d) => d);

exit返回的是有dom沒有數(shù)據(jù)的集合,也就是dom比數(shù)據(jù)多,所以exitremove基本上也是成對出現(xiàn)的。

const arr = [1,2,3]

d3.select("#dataEnter")
  .selectAll("p")
  .data(arr)
  .text((d) => d)
  .exit()
  .remove();

點擊查看data, enter, exit示例

datum

如果datum()綁定的值是數(shù)組,那么整個數(shù)組會綁定到每個被選擇的元素上。

而使用data()的話,那么會依次綁定數(shù)據(jù)。

const datumDom = d3.select("#datum")
    .selectAll("p")
    .datum(circles)
    .text((d) => {
        console.log(d);
        return JSON.stringify(d);
    });

selection.datum().append()如果選擇集是空的,那么并不會添加元素,所以使用datum要確保選擇項(dom)存在。實際項目中,圖表都是從0到1繪制,所以一般都是使用data().append()。

join

const arr = [1, 2, 3];

svg.selectAll("circle")
    .data(arr)
    .join("circle")
    .attr("cx", (d) => d * 50)
    .attr("cy", (d) => d * 50)
    .attr("r", 16)
    .attr("fill", "#F89301");

join 根據(jù)需要追加、刪除和重新排列元素,以匹配先前通過選擇綁定的數(shù)據(jù),返回合并后的enter和update集合。

也就是說join是一個簡化操作,我們可以把join分解一下:

const circle = svg.selectAll("circle").data(arr);

const newCircle = circle.enter()
    .append("circle")
    .merge(circle)
    .attr("cx", (d) => d * 50)
    .attr("cy", (d) => d * 50)
    .attr("r", 16)
    .attr("fill", "#F89301");

最后

這里有一個示例動態(tài)的顯示了enter(綠色)、update(灰色)exit(紅色)效果:

點擊查看 join 示例

以上就是D3.js入門之D3 DataJoin的使用的詳細內(nèi)容,更多關(guān)于D3.js DataJoin的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js實現(xiàn)json數(shù)據(jù)行到列的轉(zhuǎn)換的實例代碼

    js實現(xiàn)json數(shù)據(jù)行到列的轉(zhuǎn)換的實例代碼

    為了實現(xiàn)這樣的數(shù)據(jù)顯示出來三個序列,分別為鄭州、新鄉(xiāng)、安陽的電量,就需要自己實現(xiàn)對這樣數(shù)據(jù)的轉(zhuǎn)換,轉(zhuǎn)換成如下的形式:
    2013-08-08
  • js中if語句的幾種優(yōu)化代碼寫法

    js中if語句的幾種優(yōu)化代碼寫法

    UglifyJS是一個對javascript進行壓縮和美化的工具,在它的文檔說明中,我看到了幾種關(guān)于if語句優(yōu)化的方法。
    2011-03-03
  • 詳解javascript 正則表達式之分組與前瞻匹配

    詳解javascript 正則表達式之分組與前瞻匹配

    本文主要講解javascript 的正則表達式中的分組匹配與前瞻匹配的,需要對正則的有基本認識,本人一直對兩種匹配模棱不清,還有不清楚的朋友跟隨腳本之家小編一起看看吧
    2018-05-05
  • xmlplus組件設(shè)計系列之圖標(ICON)(1)

    xmlplus組件設(shè)計系列之圖標(ICON)(1)

    這篇文章主要為大家詳細介紹了xmlplus組件設(shè)計系列之圖標ICON的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 詳解小程序不同頁面之間通訊的解決方案

    詳解小程序不同頁面之間通訊的解決方案

    這篇文章主要介紹了詳解小程序不同頁面之間通訊的解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • javascript彈性運動效果簡單實現(xiàn)方法

    javascript彈性運動效果簡單實現(xiàn)方法

    這篇文章主要介紹了javascript彈性運動效果簡單實現(xiàn)方法,實例分析了JavaScript實現(xiàn)彈性運動的原理,涉及JavaScript數(shù)學(xué)運算與時間函數(shù)的相關(guān)使用技巧,需要的朋友可以參考下
    2016-01-01
  • JS實現(xiàn)的駝峰式和連字符式轉(zhuǎn)換功能分析

    JS實現(xiàn)的駝峰式和連字符式轉(zhuǎn)換功能分析

    這篇文章主要介紹了JS實現(xiàn)的駝峰式和連字符式轉(zhuǎn)換功能,結(jié)合實例形式分析了JS實現(xiàn)字符串的駝峰式與連接符式轉(zhuǎn)換的實現(xiàn)技巧,涉及js字符串遍歷、轉(zhuǎn)換及正則表達式相關(guān)操作方法,需要的朋友可以參考下
    2016-12-12
  • 微信小程序?qū)崿F(xiàn)井字棋游戲

    微信小程序?qū)崿F(xiàn)井字棋游戲

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • JavaScript刪除有序數(shù)組中的重復(fù)項

    JavaScript刪除有序數(shù)組中的重復(fù)項

    這篇文章主要介紹了JavaScript刪除有序數(shù)組中的重復(fù)項,主要解決有序數(shù)組?nums?,要求原地刪除重復(fù)出現(xiàn)的元素,使每個元素只出現(xiàn)一次,返回刪除后數(shù)組的新長的問題,下面實現(xiàn)操作,需要的小伙伴可以參考一下
    2022-03-03
  • js實現(xiàn)滾動條自動滾動到最底部示例代碼

    js實現(xiàn)滾動條自動滾動到最底部示例代碼

    這篇文章主要給大家介紹了關(guān)于js實現(xiàn)滾動條自動滾動到最底部的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-06-06

最新評論