diff --git a/app/src/protyle/render/highlightRender.ts b/app/src/protyle/render/highlightRender.ts index 80accfb7b..10db9448f 100644 --- a/app/src/protyle/render/highlightRender.ts +++ b/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 { diff --git a/app/src/search/util.ts b/app/src/search/util.ts index 1ea6bd714..772e098eb 100644 --- a/app/src/search/util.ts +++ b/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; + }); } }); });