Steve-xmh / amll-ttml-tool

A brand-new syllable lyric editor for Apple Music-like lyrics! 一个全新的逐词歌词编辑器!针对 Apple Music-like Lyrics 设计!
https://steve-xmh.github.io/amll-ttml-tool/
GNU General Public License v3.0
101 stars 10 forks source link

[BUG] 网页版快捷键无效 #20

Closed Miaoyww closed 7 months ago

Miaoyww commented 7 months ago

系统版本: Windows 11 23H2 22631.3235 浏览器: Edge 122.0.2365.92 (Official build) (64-bit)

无法在AMLL TTML Tool网页版使用快捷键来打轴。 值得注意的是,Tauri 桌面版本也会出现同样的问题,但似乎出现问题的概率比较小?

另外我使用的中文输入法是搜狗输入法,不过我在打轴时会切换至Windows自带的英文输入法,不知道此问题与搜狗有无关系。

Steve-xmh commented 7 months ago

可以尝试在设置中更换绑定键位,或者更换英文(美国)键盘,如果问题仍然存在,清提供一个简单的视频或者按键绑定配置或者输入法状态。

Miaoyww commented 7 months ago

这似乎和输入法没什么大关系。在切屏之后快捷键就不好使了

https://github.com/Steve-xmh/amll-ttml-tool/assets/52089819/21337c0c-380c-4686-9af6-5d43456c09aa

Miaoyww commented 7 months ago

此问题似乎是由于keybindings.ts 中pressingKeys未及时清理而导致的按键事件堆叠

Miaoyww commented 7 months ago

逻辑修改如下: 另外,原来的逻辑会使多按键快捷键无效。 稍后我会提交一个pr

window.addEventListener("keyup", (evt) => {
    if (isEditing(evt)) {
        pressingKeys.clear();
        bufferedKeys.clear();
        return;
    }
    console.log("pressingkeys now:", pressingKeys.size);
    if (bufferedKeys.size > 0) {
        const joined = [...bufferedKeys].join(" + ");
        bufferedKeys.clear();
        const callbacks = registeredKeyBindings.get(joined);

        if (callbacks) {
            const downTimeOffset = evt.timeStamp - downTime;
            const e: KeyBindingEvent = {
                downTime,
                downTimeOffset,
            };
            for (const cb of callbacks) {
                try {
                    cb(e);
                } catch (err) {
                    console.warn("Error in key binding ", joined, "callback", err);
                }
            }
            evt.preventDefault();
            evt.stopPropagation();
            evt.stopImmediatePropagation();
        }
    }
    pressingKeys.clear();

});