修复行情区 15m 周期快捷键与全屏 F 键

- 数字 1 不再立即切 1m,支持连按 15/1440/10080

- 新增 F 键全屏,捕获阶段监听 Ctrl+空格

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-02 15:08:35 +08:00
parent bfffc7d984
commit 96affeb0a6
2 changed files with 24 additions and 18 deletions
+21 -15
View File
@@ -701,10 +701,16 @@
function canExtendTfDigitBuffer(buf) { function canExtendTfDigitBuffer(buf) {
if (!buf) return false; if (!buf) return false;
return TF_MINUTE_KEYS.some(function (k) { return TF_MINUTE_KEYS.some(function (k) {
return k.indexOf(buf) === 0; return k.length > buf.length && k.indexOf(buf) === 0;
}); });
} }
function shouldCommitTfBufferNow(buf) {
const tf = resolveTfFromDigitBuffer(buf);
if (!tf) return false;
return !canExtendTfDigitBuffer(buf);
}
function resolveTfFromDigitBuffer(buf) { function resolveTfFromDigitBuffer(buf) {
if (!buf) return null; if (!buf) return null;
return TF_BY_MINUTES[buf] || null; return TF_BY_MINUTES[buf] || null;
@@ -774,15 +780,13 @@
tfDigitBuf = ""; tfDigitBuf = "";
} }
tfDigitBuf += digit; tfDigitBuf += digit;
const immediate = resolveTfFromDigitBuffer(tfDigitBuf); if (shouldCommitTfBufferNow(tfDigitBuf)) {
if (immediate) {
commitTfDigitBuffer(); commitTfDigitBuffer();
return; return;
} }
if (!canExtendTfDigitBuffer(tfDigitBuf)) { if (!canExtendTfDigitBuffer(tfDigitBuf)) {
tfDigitBuf = digit; tfDigitBuf = digit;
const again = resolveTfFromDigitBuffer(tfDigitBuf); if (shouldCommitTfBufferNow(tfDigitBuf)) {
if (again) {
commitTfDigitBuffer(); commitTfDigitBuffer();
return; return;
} }
@@ -791,14 +795,13 @@
tfDigitTimer = setTimeout(commitTfDigitBuffer, TF_DIGIT_TIMEOUT_MS); tfDigitTimer = setTimeout(commitTfDigitBuffer, TF_DIGIT_TIMEOUT_MS);
} }
function isFullscreenShortcut(e) { function isChartFullscreenShortcut(e) {
return ( if (e.altKey || e.metaKey) return false;
e.ctrlKey && const isSpace =
!e.altKey && e.code === "Space" || e.key === " " || e.key === "Spacebar";
!e.metaKey && if (isSpace && e.ctrlKey) return true;
!e.shiftKey && if ((e.key === "f" || e.key === "F") && !e.ctrlKey && !e.shiftKey) return true;
(e.code === "Space" || e.key === " " || e.key === "Spacebar") return false;
);
} }
function onMarketKeydown(e) { function onMarketKeydown(e) {
@@ -806,12 +809,15 @@
if (e.key === "Escape" && chartFullscreen) { if (e.key === "Escape" && chartFullscreen) {
e.preventDefault(); e.preventDefault();
e.stopPropagation();
setChartFullscreen(false); setChartFullscreen(false);
return; return;
} }
if (isFullscreenShortcut(e)) { if (isChartFullscreenShortcut(e)) {
if (isTypingInField(e.target) && (e.key === "f" || e.key === "F")) return;
e.preventDefault(); e.preventDefault();
e.stopPropagation();
toggleChartFullscreen(); toggleChartFullscreen();
return; return;
} }
@@ -1597,7 +1603,7 @@
updateIndicators(); updateIndicators();
}); });
}); });
document.addEventListener("keydown", onMarketKeydown); window.addEventListener("keydown", onMarketKeydown, true);
if (elFsExchange) { if (elFsExchange) {
elFsExchange.addEventListener("change", function () { elFsExchange.addEventListener("change", function () {
syncMainFromFsToolbar(); syncMainFromFsToolbar();
+3 -3
View File
@@ -60,7 +60,7 @@
<div id="page-market" class="page hidden"> <div id="page-market" class="page hidden">
<div class="page-head"> <div class="page-head">
<h1><span class="head-tag">MKT</span> 行情区</h1> <h1><span class="head-tag">MKT</span> 行情区</h1>
<p class="page-desc">按需拉取 K 线,本地库保留 15 天(无后台自动更新)。快捷键:<kbd>Ctrl</kbd>+<kbd>空格</kbd> 全屏/退出全屏(全屏时 <kbd>Esc</kbd> 退出);数字键切换周期(分钟):1/5/15/60/240/1440/10080。</p> <p class="page-desc">按需拉取 K 线,本地库保留 15 天(无后台自动更新)。快捷键:<kbd>F</kbd><kbd>Ctrl</kbd>+<kbd>空格</kbd> 全屏/退出(全屏时 <kbd>Esc</kbd> 退出;Win 下 Ctrl+空格常被输入法占用,请优先用 <kbd>F</kbd>);数字键切换周期(分钟):1/5/15/60/240/1440/10080(多数字连按,如 1 再 5 为 15m)</p>
</div> </div>
<details class="hint-box"> <details class="hint-box">
<summary>数据说明</summary> <summary>数据说明</summary>
@@ -112,7 +112,7 @@
<label class="market-ind-opt"><input type="checkbox" id="market-ind-rsi" value="rsi" /> RSI</label> <label class="market-ind-opt"><input type="checkbox" id="market-ind-rsi" value="rsi" /> RSI</label>
</div> </div>
</details> </details>
<button type="button" id="market-chart-fullscreen" class="ghost market-fs-btn" title="K线全屏(Ctrl+空格)">全屏</button> <button type="button" id="market-chart-fullscreen" class="ghost market-fs-btn" title="K线全屏(F 或 Ctrl+空格)">全屏</button>
</div> </div>
</div> </div>
<div class="market-ohlcv-row"> <div class="market-ohlcv-row">
@@ -240,7 +240,7 @@
<div id="toast"></div> <div id="toast"></div>
<script src="https://unpkg.com/lightweight-charts@4.2.0/dist/lightweight-charts.standalone.production.js"></script> <script src="https://unpkg.com/lightweight-charts@4.2.0/dist/lightweight-charts.standalone.production.js"></script>
<script src="/assets/chart.js?v=20260528-hub-fs-keys"></script> <script src="/assets/chart.js?v=20260528-hub-fs-keys2"></script>
<script src="/assets/app.js?v=20260528-hub-tpsl-fix"></script> <script src="/assets/app.js?v=20260528-hub-tpsl-fix"></script>
</body> </body>
</html> </html>