diff --git a/app/src/protyle/wysiwyg/keydown.ts b/app/src/protyle/wysiwyg/keydown.ts index 78606534811..175a4b9ad45 100644 --- a/app/src/protyle/wysiwyg/keydown.ts +++ b/app/src/protyle/wysiwyg/keydown.ts @@ -648,7 +648,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { ) || (!firstEditElement && nodeElement.isSameNode(protyle.wysiwyg.element.firstElementChild))) { // 不能用\n判断,否则文字过长折行将错误 https://github.com/siyuan-note/siyuan/issues/6156 - if (getSelectionPosition(nodeElement, range).top - parseInt(getComputedStyle(nodeElement).paddingTop) - protyle.wysiwyg.element.getBoundingClientRect().top < 40 || nodeElement.classList.contains("av")) { + if (getSelectionPosition(nodeEditableElement, range).top - nodeEditableElement.getBoundingClientRect().top < 20 || nodeElement.classList.contains("av")) { if (protyle.title && protyle.title.editElement && (protyle.wysiwyg.element.firstElementChild.getAttribute("data-eof") === "1" || protyle.contentElement.scrollTop === 0)) { @@ -663,7 +663,8 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { } } } else { - if (nodeEditableElement?.innerText.substr(0, position.end).indexOf("\n") === -1 || (!isMac() && position.start === 0)) { + if (((nodeEditableElement?.innerText.substr(0, position.end).indexOf("\n") === -1 || position.start === 0) && + getSelectionPosition(nodeEditableElement, range).top - nodeEditableElement.getBoundingClientRect().top < 20)) { let previousElement: HTMLElement = getPreviousBlock(nodeElement) as HTMLElement; if (previousElement) { previousElement = getLastBlock(previousElement) as HTMLElement; @@ -732,17 +733,17 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { } event.stopPropagation(); event.preventDefault(); - } else if (nodeEditableElement?.innerText.substr(position.end).indexOf("\n") === -1) { + } else if (nodeEditableElement?.innerText.substr(position.end).indexOf("\n") === -1 || position.end >= nodeEditableElement.innerText.trimEnd().length) { // 需使用 innerText,否则 td 中的 br 无法转换为 \n; position.end 不能加1,否则倒数第二行行末无法下移 - // 下一个块是折叠块 + range.collapse(false) const nextFoldElement = getNextBlock(nodeElement) as HTMLElement; if (nextFoldElement) { - focusBlock(nextFoldElement); - scrollCenter(protyle, nextFoldElement); - event.stopPropagation(); - event.preventDefault(); - } else { - range.collapse(false); + if(nodeEditableElement.getBoundingClientRect().bottom - getSelectionPosition(nodeElement, range).top < 40) { + focusBlock(nextFoldElement); + scrollCenter(protyle, nextFoldElement); + event.stopPropagation(); + event.preventDefault(); + } } } }