Van 6 سال پیش
والد
کامیت
ff4e2467ed
3فایلهای تغییر یافته به همراه18 افزوده شده و 3 حذف شده
  1. 1 0
      CHANGELOG.md
  2. 10 2
      src/ts/editor/setSelection.ts
  3. 7 1
      src/ts/hotkey/index.ts

+ 1 - 0
CHANGELOG.md

@@ -12,6 +12,7 @@
 
 ### v1.7.11 / 2019-08-22
 
+* [103](https://github.com/b3log/vditor/issues/103) 光标位置应在正中间 `feature`
 * [101](https://github.com/b3log/vditor/issues/101) video 标签移动端溢出 `enhancement`
 * [100](https://github.com/b3log/vditor/issues/100) esc/选中工具栏中的表情或标题后输入框中的 at 及 emoji 的提示应消失 `bug`
 * [99](https://github.com/b3log/vditor/issues/99) esc/选中工具栏中的表情或标题后输入框中的 at 及 emoji 的提示应消失 `bug`

+ 10 - 2
src/ts/editor/setSelection.ts

@@ -21,7 +21,11 @@ export const setSelectionByPosition = (start: number, end: number, editor: HTMLP
             if (pNode.childNodes[0].nodeType === 3) {
                 range.setStart(pNode.childNodes[0], start - charIndex);
             } else if (pNode.nextSibling) {
-                range.setStartBefore(pNode.nextSibling);
+                if (start === 0) {
+                    range.setStartBefore(pNode);
+                } else {
+                    range.setStartBefore(pNode.nextSibling);
+                }
             } else {
                 range.setStartAfter(pNode);
             }
@@ -31,7 +35,11 @@ export const setSelectionByPosition = (start: number, end: number, editor: HTMLP
             if (pNode.childNodes[0].nodeType === 3) {
                 range.setEnd(pNode.childNodes[0], end - charIndex);
             } else if (pNode.nextSibling) {
-                range.setEndBefore(pNode.nextSibling);
+                if (end === 0) {
+                    range.setEndBefore(pNode);
+                } else {
+                    range.setEndBefore(pNode.nextSibling);
+                }
             } else {
                 range.setEndAfter(pNode);
             }

+ 7 - 1
src/ts/hotkey/index.ts

@@ -5,6 +5,7 @@ import {getText} from "../editor/getText";
 import {insertText} from "../editor/insertText";
 import {setSelectionByPosition} from "../editor/setSelection";
 import {getCurrentLinePosition} from "../util/getCurrentLinePosition";
+import {getCursorPosition} from "../hint/getCursorPosition";
 
 export class Hotkey {
     public hintElement: HTMLElement;
@@ -35,7 +36,12 @@ export class Hotkey {
         this.vditor.editor.element.addEventListener("keypress", (event: KeyboardEvent) => {
             if (!event.metaKey && !event.ctrlKey && event.key.toLowerCase() === "enter") {
                 insertText(this.vditor, "\n", "", true);
-                this.vditor.editor.element.scrollTop = this.vditor.editor.element.scrollHeight
+
+                const cursorTop = getCursorPosition(this.vditor.editor.element).top
+                const center = this.vditor.editor.element.clientHeight / 2
+                if (cursorTop > center) {
+                    this.vditor.editor.element.scrollTop = this.vditor.editor.element.scrollTop + (cursorTop - center)
+                }
                 event.preventDefault();
             }
         });