修复行情区 15m 周期快捷键与全屏 F 键
- 数字 1 不再立即切 1m,支持连按 15/1440/10080 - 新增 F 键全屏,捕获阶段监听 Ctrl+空格 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user