在单页应用程序的 svelte 上处理 window.scrollTo

Handle window.scrollTo on svelte on a single page application

我如何在更新我的 Repl 示例后转到 window 位置?当我向下滚动并单击卡片并返回到主 window 时,它总是跳到顶部。我试图在更新后和更新前插入 window.scrollTo,在 OpenCard.svelte 内,也在 App.svelte 内,但我无法弄清楚。最好的解决方案是什么?

Repl

这个问题的解决方案不止一种,因为这样的问题代码量挺大的

一个解决方案是将此行添加到您的 showHome 函数

function showHome() {
    visible = true;
    requestAnimationFrame(() => window.scrollTo(0,100)); // That's the line
  }

工作原理:

此解决方案有效的原因是因为您将整个应用程序设置为 visible 变量,因此在设置 visible = true; 之后应用程序尚未更新,因此调用 window.scrollTo立即将在刷新前滚动。 因此将其放在 requestAnimationFrame 中将等待 DOM 的下一次重绘,仅在 DOM 更新后才进行滚动。

另一个解决方案仍然需要requestAnimationFrame, 没有避免使用它。 它将需要创建一个像这样的反应语句:

$: if (visible) requestAnimationFrame(() => window.scrollTo(0,100));

这样您的应用将始终知道何时根据您的 visible 变量值更改滚动条。

我认为你应该选择第二种解决方案,它在未来的变化中更稳定。

要了解有关 requestAnimationFrame 及其使用方法的更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame