修复行情区 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) {
if (!buf) return false;
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) {
if (!buf) return null;
return TF_BY_MINUTES[buf] || null;
@@ -774,15 +780,13 @@
tfDigitBuf = "";
}
tfDigitBuf += digit;
const immediate = resolveTfFromDigitBuffer(tfDigitBuf);
if (immediate) {
if (shouldCommitTfBufferNow(tfDigitBuf)) {
commitTfDigitBuffer();
return;
}
if (!canExtendTfDigitBuffer(tfDigitBuf)) {
tfDigitBuf = digit;
const again = resolveTfFromDigitBuffer(tfDigitBuf);
if (again) {
if (shouldCommitTfBufferNow(tfDigitBuf)) {
commitTfDigitBuffer();
return;
}
@@ -791,14 +795,13 @@
tfDigitTimer = setTimeout(commitTfDigitBuffer, TF_DIGIT_TIMEOUT_MS);
}
function isFullscreenShortcut(e) {
return (
e.ctrlKey &&
!e.altKey &&
!e.metaKey &&
!e.shiftKey &&
(e.code === "Space" || e.key === " " || e.key === "Spacebar")
);
function isChartFullscreenShortcut(e) {
if (e.altKey || e.metaKey) return false;
const isSpace =
e.code === "Space" || e.key === " " || e.key === "Spacebar";
if (isSpace && e.ctrlKey) return true;
if ((e.key === "f" || e.key === "F") && !e.ctrlKey && !e.shiftKey) return true;
return false;
}
function onMarketKeydown(e) {
@@ -806,12 +809,15 @@
if (e.key === "Escape" && chartFullscreen) {
e.preventDefault();
e.stopPropagation();
setChartFullscreen(false);
return;
}
if (isFullscreenShortcut(e)) {
if (isChartFullscreenShortcut(e)) {
if (isTypingInField(e.target) && (e.key === "f" || e.key === "F")) return;
e.preventDefault();
e.stopPropagation();
toggleChartFullscreen();
return;
}
@@ -1597,7 +1603,7 @@
updateIndicators();
});
});
document.addEventListener("keydown", onMarketKeydown);
window.addEventListener("keydown", onMarketKeydown, true);
if (elFsExchange) {
elFsExchange.addEventListener("change", function () {
syncMainFromFsToolbar();
+3 -3
View File
@@ -60,7 +60,7 @@
<div id="page-market" class="page hidden">
<div class="page-head">
<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>
<details class="hint-box">
<summary>数据说明</summary>
@@ -112,7 +112,7 @@
<label class="market-ind-opt"><input type="checkbox" id="market-ind-rsi" value="rsi" /> RSI</label>
</div>
</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 class="market-ohlcv-row">
@@ -240,7 +240,7 @@
<div id="toast"></div>
<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>
</body>
</html>