diff --git a/README.md b/README.md index 7908af27..f24574b0 100644 --- a/README.md +++ b/README.md @@ -242,7 +242,7 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h ### 快捷键翻页 -在列表页和详情页使用左右方向键翻页。 +在列表页和详情页使用左右方向键翻页。以及使用上下方向键进行标签投票。 ## nhentai diff --git a/docs/index.md b/docs/index.md index effcf851..307beb4d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -242,7 +242,7 @@ Cotrans 也有自己的油猴脚本 —— 「[Cotrans 漫画/图片翻译器](h ### 快捷键翻页 -在列表页和详情页使用左右方向键翻页。 +在列表页和详情页使用左右方向键翻页。以及使用上下方向键进行标签投票。 ## nhentai diff --git a/src/helper/index.ts b/src/helper/index.ts index 562f379b..ebdb1c39 100644 --- a/src/helper/index.ts +++ b/src/helper/index.ts @@ -132,19 +132,6 @@ export const saveAs = (blob: Blob, name = 'download') => { setTimeout(() => a.dispatchEvent(new MouseEvent('click'))); }; -/** 监听键盘事件 */ -export const linstenKeyup = (handler: (e: KeyboardEvent) => unknown) => - window.addEventListener('keyup', (e) => { - // 跳过输入框的键盘事件 - switch ((e.target as HTMLElement).tagName) { - case 'INPUT': - case 'TEXTAREA': - return; - } - - handler(e); - }); - /** 滚动页面到指定元素的所在位置 */ export const scrollIntoView = ( selector: string, diff --git a/src/site/ehentai/hotkeys.ts b/src/site/ehentai/hotkeys.ts index d394a3c6..16f8534f 100644 --- a/src/site/ehentai/hotkeys.ts +++ b/src/site/ehentai/hotkeys.ts @@ -1,35 +1,58 @@ -import { linstenKeyup, querySelector } from 'main'; +import { querySelector } from 'main'; import { type PageType } from '.'; +/** 监听键盘事件 */ +export const linstenKeydown = (handler: (e: KeyboardEvent) => unknown) => + window.addEventListener('keydown', (e) => { + // 跳过输入框的键盘事件 + switch ((e.target as HTMLElement).tagName) { + case 'INPUT': + case 'TEXTAREA': + return; + } + return handler(e); + }); + /** 快捷键翻页 */ export const hotkeysPageTurn = (pageType: PageType) => { if (pageType === 'gallery') { - linstenKeyup((e) => { + linstenKeydown((e) => { switch (e.key) { case 'ArrowRight': case 'd': - querySelector('#dnext')?.click(); - break; + e.preventDefault(); + return querySelector('.ptt td:last-child:not(.ptdd)')?.click(); case 'ArrowLeft': case 'a': - querySelector('#dprev')?.click(); - break; + e.preventDefault(); + return querySelector('.ptt td:first-child:not(.ptdd)')?.click(); + } + + // 使用上下方向键进行投票 + if (!unsafeWindow.selected_tagid) return; + switch (e.key) { + case 'ArrowUp': + e.preventDefault(); + return unsafeWindow?.tag_vote_up(); + case 'ArrowDown': + e.preventDefault(); + return unsafeWindow?.tag_vote_down(); } }); } else { - linstenKeyup((e) => { + linstenKeydown((e) => { switch (e.key) { case 'ArrowRight': case 'd': - querySelector('#unext')?.click(); - break; + e.preventDefault(); + return querySelector('#unext')?.click(); case 'ArrowLeft': case 'a': - querySelector('#uprev')?.click(); - break; + e.preventDefault(); + return querySelector('#uprev')?.click(); } }); }