在虚拟货币或股票交易界面,市场深度图(又称 深度图、深度桶、市场深度)能让投资者一眼看清买卖双方挂单分布。若你正在寻找一款 轻量化、不依赖第三方库、支持主题自定义 的纯 JS 组件,这篇指南将从原理到实战,带你完整认识 DepthChart 深度图组件。
一、核心关键词提炼
市场深度、深度图、JavaScript图表、无依赖图表组件、加密货币可视化、前端深度图、交易数据图表、DepthChart组件
二、组件亮点速览
- 高性能 Canvas 引擎:基于原生
canvas
渲染,大数据量也不卡顿,相较 SVG 在数十万级数据场景优势明显。 - 零依赖:无需 jQuery、React、Vue 适配层,直接嵌入任何页面即可使用。
- 交互丰富:支持 鼠标滚轮水平缩放 与 光标十字线跟踪,放大关键区间,定位更精准。
- 主题随心换:预置 深色 / 浅色 两版配色,亦可通过对象参数完全自定义。
- 文件体积小:压缩后不足 25 KB,极致轻量,加载零负担。
三、文件结构总览
src/Dataset.js
:市场深度数据模型src/Renderer.js
:基于 canvas 的渲染器src/Scale.js
:坐标缩放 & 刻度计算src/Theme.js
:主题样式配置src/DepthChart.js
:入口类lib/uikit.umd.js
:打包后的 UMD 文件(浏览器直接引入即可)
四、三步快速上手
1. 引入脚本 & 创建画布
在 HTML 中加入 canvas
并加载库:
<canvas id="depth-chart" width="600" height="360"></canvas>
<script src="lib/uikit.umd.js"></script>
2. 准备市场深度数据
数据格式 固定 为双数组:
const dataset = {
bids: [
["0.00283330", "95.18"],
["0.00283300", "5.56"],
["0.00282410", "3.74"]
],
asks: [
["0.00283480", "4.95"],
["0.00283490", "5.19"],
["0.00284410", "15.53"]
]
}
bids
按价格 高到低 排序asks
按价格 低到高 排序
3. 实例化组件
一行代码完成渲染:
const depthChart = new uikit.DepthChart({
el: '#depth-chart',
dataset // ES6 简写
})
打开浏览器,即可看到 实时的市场深度可视化。
五、深度主题自定义
预置主题调用
// 深色
depthChart.setTheme(uikit.Theme.dark())
// 浅色
depthChart.setTheme(uikit.Theme.light())
自定义方案(可覆盖 20+ 样式点)
const myTheme = {
background: '#0d1219',
bidsLineStyle: { stroke: '#00cea6', lineWidth: 2 },
asksLineStyle: { stroke: '#ff5252', lineWidth: 2 },
focusTextStyle: {
font: '12px Arial',
fill: '#ffffff',
textAlign: 'center'
}
}
depthChart.setTheme(myTheme)
这样可直接 贴合品牌色、匹配暗/亮主题模式,无须写 CSS。
六、二次开发与源码配合
深度图完全开源,修改源文件即可实现:
- 新增指标线:在
Renderer.js
追加 MACD、RSI 等点在 canvas 上绘制 - 监听市场深度 websocket:在
Dataset.js
中新写mergeSnapshot(rawData)
方法 - 支持本地缓存:利用
localStorage
保存用户上次缩放比例与主题
构建方法:
npm install -g rollup
npm run build
生成的 uikit.umd.js
会直接覆盖旧文件,无缝升级。
👉 查看示例源码仓库
七、常见问题(FAQ)
Q1:深度图支持哪些数据频率更新?
A:由于基于 Canvas,理论刷新上限 ≈60 FPS;市面行情推送 50ms-200ms 一次,足够应对高并发。
Q2:如何接入币安实时 WebSocket?
A:在 src/Dataset.js
内补一个 consumeBinanceSpeed(depthUpdate)
,把数据转化为 {bids, asks}
后直接 dataset.update({bids, asks})
即可渲染。
Q3:能放到手机端 H5 吗?
A:组件已内置 触摸滚动/缩放 预留接口;只需监听 touchstart/move/end
并换算成 scrollX
值即可,完整示例与我们源码包一起提供。
Q4:需要安装 Node & npm 吗?
A:浏览器端使用时 即插即用;仅当需要二次打包时才需 Node 环境。
Q5:为什么同样的数据集,第一次渲染很快,后续鼠标缩放会卡顿?
A:确保 dataset
没有每次都 new Object
;推荐 复用实例的 dataset.update(data)
,避免 GC 影响。
八、实战案例:Binance BTC/USDT 深度图
- 启动 WebSocket
订阅 Binancebtcusdt@depth@100ms
逐笔深度流。 实时渲染
socket.onmessage = ({ data }) => { const json = JSON.parse(data) const model = { bids: json.b, asks: json.a } depthChart.dataset.update(model) }
优化
- 每 200ms 加入防抖,减少 DOM 通知频率
- Double-buffer 或离屏 Canvas 叠加绘制,维持 60 FPS
最终效果:用户手机上横向滑动,仍可实时看到 买卖墙厚度变化,无需额外插件。
九、总结
DepthChart 提供一套 “开箱即用、极致轻量、二次可拓展” 的 市场深度可视化 方案,无论你是独立交易所的前端工程师,还是量化策略团队的数据展示负责人,都能高效落地并获得优秀用户体验。现在就动手试试,将专业级深度图嵌入你的交易系统吧!