Electron使用D3可视化磁盘空间(6)

387 阅读1分钟

在上一集中,我们创建了一个小应用程序。以一种非常无聊的方式显示您有多少可用磁盘空间。

现在是时候给它加点料了!我们根本不会触及后端,只修改前端部分。

安装D3

首先,我们需要安装D3。

 npm install d3

这是前端的HTML代码。我提前添加了一些样式:

<!DOCTYPE html>
<html>
  <body>
    <style>
      body { text-align: center; }
      #info { display: grid; grid-template-columns: 1fr 1fr 1fr; }
    </style>
    <h1>Free disk space</h1>
    <div id="info"></div>
    <script src="./node_modules/d3/dist/d3.js"></script>
    <script src="app.js"></script>
  </body>
</html>

D3应用程序

这是D3的应用程序,我不会解释得太详细,因为D3是一个很大的主题。

我们通过displayFreeDiskSpace 后台获取data

function displayFreeDiskSpace(data) {
  let info = d3.select("#info")

  for (let row of data) {
    let total = parseInt(row[1])
    let used = parseInt(row[2])
    let free = total - used
    let path = row[5]

    let data = { free, used }

    let div = info.append("div")
    div.append("h3").text(path)

    let svg = div
      .append("svg")
      .attr("width", "100px")
      .attr("height", "100px")
    let g = svg
      .append("g")
      .attr("transform", "translate(50,50)")

    let pie = d3.pie().value(d => d[1])
    let pieData = pie(Object.entries(data))
    let color = d3
      .scaleOrdinal()
      .domain(["used", "free"])
      .range(["red", "green"])

    g
      .selectAll("path")
      .data(pieData)
      .enter()
      .append("path")
      .attr("d", d3.arc()
            .innerRadius(0)
            .outerRadius(45)
           )
      .attr("fill", d => color(d.data[0]))
      .attr("stroke", "black")
      .style("stroke-width", "2px")
      .style("opacity", 0.7)
  }
}

结果

原文:dev.to/taw/electro…