You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Svelte页面加载时显示加载器?求非SvelteKit等价实现方案

在纯Svelte中实现页面加载状态判断与加载器显示

纯Svelte没有内置类似SvelteKit navigating 的加载状态管理能力,需要我们手动通过自定义Store和业务逻辑来实现,以下是具体方案:

1. 创建加载状态的自定义Store

首先创建一个全局可写Store来跟踪加载状态,方便在组件间共享状态:

// stores.js
import { writable } from 'svelte/store';

// 初始状态为未加载
export const isLoading = writable(false);

2. 在业务逻辑中更新加载状态

根据触发加载的场景(API请求、路由切换等),手动更新Store的状态:

场景1:API请求时的加载状态

在发起异步请求前后切换加载状态:

import { isLoading } from './stores.js';

async function fetchUserData() {
  // 开始加载
  isLoading.set(true);
  try {
    const res = await fetch('https://your-api-endpoint.com/users');
    const data = await res.json();
    // 处理返回的数据
  } catch (err) {
    console.error('请求失败:', err);
  } finally {
    // 无论成功失败,结束加载
    isLoading.set(false);
  }
}

场景2:路由切换时的加载状态

如果你使用svelte-spa-router这类SPA路由库,可以通过监听路由变化来管理加载状态:

import { route } from 'svelte-spa-router';
import { isLoading } from './stores.js';

// 监听路由切换事件
route.subscribe((newRoute) => {
  // 路由切换开始时标记为加载中
  isLoading.set(true);
  
  // 如果路由对应的组件需要加载数据,可以在组件的onMount钩子中完成后再将isLoading设为false
});

3. 实现全局加载器组件

创建一个加载器组件,根据Store的状态自动显示/隐藏:

<!-- Loader.svelte -->
<script>
  import { isLoading } from './stores.js';
</script>

{#if $isLoading}
  <div class="loader-wrapper">
    <div class="loader">加载中...</div>
  </div>
{/if}

<style>
  .loader-wrapper {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    background-color: rgba(255, 255, 255, 0.9);
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 9999;
  }

  .loader {
    font-size: 1.2rem;
    color: #333;
    /* 添加旋转动画增强视觉效果 */
    animation: spin 1s linear infinite;
  }

  @keyframes spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
  }
</style>

4. 在根组件中引入加载器

将加载器组件放在根组件(如App.svelte)中,确保全局范围内都能触发显示:

<!-- App.svelte -->
<script>
  import Loader from './Loader.svelte';
  // 其他组件和路由逻辑
</script>

<Loader />
<!-- 页面主体内容 -->

内容的提问来源于stack exchange,提问作者manojadams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:05:23