Browse Source

:art: search

Vanessa 1 year ago
parent
commit
0a8ea4e1b8
2 changed files with 5 additions and 9 deletions
  1. 0 8
      app/src/protyle/render/highlightRender.ts
  2. 5 1
      app/src/search/util.ts

+ 0 - 8
app/src/protyle/render/highlightRender.ts

@@ -102,14 +102,6 @@ export const highlightRender = (element: Element, cdn = Constants.PROTYLE_CDN) =
                         languageElement.style.marginLeft = "";
                     }
                 }
-                // 搜索定位
-                const layoutElement = hasClosestByClassName(block, "search__layout", true);
-                if (layoutElement && block.parentElement.getAttribute("data-node-id") === layoutElement.querySelector("#searchList > .b3-list-item--focus")?.getAttribute("data-node-id")) {
-                    const matchElement = block.querySelector('span[data-type="search-mark"]');
-                    if (matchElement) {
-                        matchElement.scrollIntoView();
-                    }
-                }
                 block.innerHTML = window.hljs.highlight(
                     block.textContent + (block.textContent.endsWith("\n") ? "" : "\n"), // https://github.com/siyuan-note/siyuan/issues/4609
                     {

+ 5 - 1
app/src/search/util.ts

@@ -1189,7 +1189,11 @@ export const getArticle = (options: {
                 if (matchElement) {
                     matchElement.classList.add("search-mark--hl");
                     const contentRect = options.edit.protyle.contentElement.getBoundingClientRect();
-                    options.edit.protyle.contentElement.scrollTop = options.edit.protyle.contentElement.scrollTop + matchElement.getBoundingClientRect().top - contentRect.top - contentRect.height / 2;
+                    const matchRectTop = matchElement.getBoundingClientRect().top;  // 需前置,否则代码高亮后会移除该元素
+                    setTimeout(() => {
+                        // 等待 scrollCenter 定位后再滚动
+                        options.edit.protyle.contentElement.scrollTop = options.edit.protyle.contentElement.scrollTop + matchRectTop - contentRect.top - contentRect.height / 2;
+                    });
                 }
             });
         });