805 字
4 分钟
BTC-Mini-Terminal:摸鱼盯盘两不误的浏览器小插件
想法
盯盘这件事,有两个矛盾:
- 打开交易所 → 太显眼,不适合”摸鱼”
- 不打开交易所 → 不知道行情,心如猫抓
BTC-Mini-Terminal 是第三个选项——一个驻扎在浏览器左下角的小面板,刷新任何网页时它都在那里,安安静静显示 BTC 实时价格。点一下弹出迷你 K 线图,再点一下收回去。
架构设计
为什么是油猴脚本
| 方案 | 优点 | 缺点 |
|---|---|---|
| Chrome 扩展 | 权限大、独立运行 | 开发成本高、审核慢 |
| 独立网页 | 简单 | 不能”跨站”显示 |
| 油猴脚本 | 零配置、全站运行、用户一键安装 | 受 GM API 限制 |
油猴脚本的方案是最轻量的——用户只需点一下”安装脚本”,之后访问任何网站都能看到 BTC 面板。
数据流
Binance API ──┬── 成功 → 更新价格 + K 线数据 │ └── 失败 → CoinGecko API (fallback) │ └── 失败 → 显示"API 不可用" 上次成功的数据继续展示双 API 备份 + 优雅降级。币安被墙时自动切 CoinGecko,两个都挂了就用缓存数据,面板不白屏。
核心实现
面板注入与隔离
// 创建 Shadow DOM 隔离,避免与宿主页面样式冲突const host = document.createElement('div');host.id = 'btc-terminal-host';document.body.appendChild(host);
const shadow = host.attachShadow({ mode: 'closed' });// 所有 CSS 在 Shadow DOM 内部,100% 隔离为什么用 Shadow DOM? 油猴脚本运行在任意网站上。如果不隔离样式,GitHub 的 CSS 可能会把你的面板搞成一团糟。{ mode: 'closed' } 防止宿主页面的 JS 意外操作面板 DOM。
K 线图渲染
// Lightweight-Charts — 28KB gzippedimport { createChart } from 'lightweight-charts';
const chart = createChart(container, { width: 320, height: 200, layout: { background: { color: 'transparent' }, textColor: '#d1d5db', }, grid: { vertLines: { color: 'rgba(255,255,255,0.05)' }, horzLines: { color: 'rgba(255,255,255,0.05)' }, }, crosshair: { mode: 0 }, // 禁用十字线(小面板不需要)});
const candleSeries = chart.addCandlestickSeries({ upColor: '#22c55e', downColor: '#ef4444', borderVisible: false, wickUpColor: '#22c55e', wickDownColor: '#ef4444',});选择 lightweight-charts 而非 TradingView Widget:
- 体积小 10 倍
- 无 iframe(性能更好)
- 完全可控的样式
价格轮询策略
let pollInterval = 5000; // 默认 5 秒
function smartPoll() { const now = Date.now(); const lastUpdate = localStorage.getItem('btc_last_update');
// 如果用户刚切回来,立刻刷新 if (!lastUpdate || now - Number(lastUpdate) > pollInterval * 2) { fetchPrice(); } else { // 正常轮询 setTimeout(fetchPrice, pollInterval); }}
// 页面可见性变化时优化document.addEventListener('visibilitychange', () => { if (!document.hidden) smartPoll(); // hidden 时不轮询,省流量省 CPU});持久化配置
键名 | 用途btc_widget_candles | K 线点数 (50/100/200)btc_widget_collapsed| 折叠状态 (1/0)btc_widget_proxy | 可选 CORS 代理前缀优先使用 GM_getValue/GM_setValue(油猴专用存储),回退到 localStorage。这样即使脚本被重新安装,用户设置也不会丢失。
设计决策
- 左下角而非右上角: 右下角已经被系统通知/输入法占据;左下角是视觉”盲区”,放面板最不突兀
- 折叠默认: 首次安装后面板是折叠的——用户适应后再展开,降低骚扰感
- 无声音通知: 价格波动提醒用颜色闪烁,不打断用户。摸鱼的黄金法则——不引人注目
安装方式
油猴脚本发布在 GreasyFork,一键安装。
源码: github.com/CHN-DST/BTC-Mini-Terminal · ⭐ 2
BTC-Mini-Terminal:摸鱼盯盘两不误的浏览器小插件
https://dst-blog.pages.dev/posts/2025-12-12-btc-mini-terminal/