本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 [署名 4.0 国际 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/deed.zh)
本文作者: 苏洋
创建时间: 2020年09月06日
统计字数: 20271字
阅读时间: 41分钟阅读
本文链接: https://soulteary.com/2020/09/06/use-nodejs-to-customize-your-technology-radar-part-2.html
-----
# 使用 Node.js 定制你的技术雷达:中篇
在上一篇文章中,我们本地已经能够运行起 Thoughtworks 新版本在线雷达。
也能够通过修改 JSON 文件来完成对内容的更新维护,但是距离好用的技术雷达还差很远,尤其是在对雷达图上的技术点、页面内容进行更新维护的时候。
本篇我们就继续来折腾,先从最复杂的雷达图部分开始吧。
## 回顾技术雷达页面细节
在继续进行定制修改前,需要先了解技术雷达的前端程序的实现方案、大概执行流程及一些原理。

通过分析查看页面资源引用、脚本程序调用,页面模版、页面运行结果状态可以得到几个信息:
- 页面的雷达图是由 D3 在页面文档加载完成后,分析页面 DOM 结构中的数据异步渲染为 SVG 图,未使用当前流行的各种前端响应式数据方案。
- 页面雷达图中的坐标点和技术列表中的内容是通过数据中的 ID 字段进行一一对应的,不论对列表元素还是雷达点进行操作,都会关联选中状态到对应的元素上。
- 页面雷达图中的点的绘制坐标是经过定制公式计算得出,应该和我们提供的 JSON 数据中的方向角 `θ` 和 半径 `r` 有关,通过简单修改数据内的 `theta` 和 `radius` 可以看到坐标有变化,但是不清楚其对应关系。
因为代码基本都被混淆过了,所以接下来我们需要开始一段简单的前端逆向过程。
## 探索雷达图的秘密
先从最难的技术点进行攻关:雷达图点坐标点的维护。实现让坐标点的添加、更新维护之类的操作,可以通过页面上“所见即所得”的方式来完成,而不需要修改 JSON 数据中的属性来碰运气。
### 从 SVG 方向入手
想要完成对点的坐标维护,首先要知道这些坐标点是怎么进行定位的。需要先观察 D3 生成的“可交互” SVG 的结构,结构示例代码:
```html