如何在 Svelte 中使用本地静态图像

Posted

技术标签:

【中文标题】如何在 Svelte 中使用本地静态图像【英文标题】:How to use local static images in Svelte 【发布时间】:2019-11-15 15:55:19 【问题描述】:

我正在按照教程 (https://svelte.dev/tutorial/dynamic-attributes) 导入本地图像文件。但它没有用。在应用程序中找不到图像。

我需要在哪里找到这些图像才能使其像教程中那样工作?

let src = './images/background.jpg'
.
.
.
<img src  />

浏览器显示找不到图片。

【问题讨论】:

你能展示你的目录结构吗? 【参考方案1】:

您将使用的本地图像需要相对于公共文件夹中的 index.html 文件进行引用。所以在你的情况下:

let src = './images/background.jpg'

background.jpg 需要位于“public”文件夹内名为“images”的文件夹中。

您可以将其引用为let src = 'images/background.jpg'

【讨论】:

【参考方案2】:

把你的图片文件夹放在公用文件夹中,然后像这样引用:

<img src="images/background.jpg"  />

或者

let src = "images/background.jpg";
.
.
.

<img src  />

【讨论】:

【参考方案3】:

这是在 svelte 中使用图像的另一种方法:

.banner-container 
    background-image: url("/images/hero-banner.png");
    background-repeat: no-repeat;
    background-size: 100% auto;

【讨论】:

这是在 Svelte 中使用图像的首选方式吗?这是我能够链接到图像的唯一方法。从 JS 做,就像评分最高的答案一样,对我不起作用。 为我工作,谢谢!【参考方案4】:

如果您正在使用 SvelteKit,并且像我一样需要在不创建任何 HTML 组件的情况下获取 DataURL,您可以执行以下操作:

<script context="module">
    // Load the resource (for simplicity I am not using any error
    // handling which you should normally do).
    export const load = async ( fetch ) => 
        let response = await fetch('/assets/img/favicon.png');
        return 
            props: 
                response,
            ,
        ;
    ;
</script>

<script>
    import  onMount  from 'svelte';

    export let response;

    let dataURL;

    onMount(async () => 
        dataURL = await getDataUrl(response);
    )

    async function getDataURL(response) 
        return blobToDataURL(await response.blob());
    
    
    function blobToDataURL(blob) 
        // Source: https://***.com/a/67551175/3986879
        return new Promise((resolve, reject) => 
            const reader = new FileReader();
            reader.onload = (_e) => resolve(reader.result);
            reader.onerror = (_e) => reject(reader.error);
            reader.onabort = (_e) => reject(new Error('Read aborted'));
            reader.readAsDataURL(blob);
        );
    
</script>

【讨论】:

以上是关于如何在 Svelte 中使用本地静态图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Svelte 的类属性中使用反应函数?

如何使用 SCSS 在 svelte 中拥有多个 css 包

如何在 Svelte 中使用 jQuery

如何防止 React Native 中的静态图像在 iOS 上出现卡顿/异步加载

在 svelte 中,如何在变量更改时使用 `console.log('yes')`?

如何在 Svelte 3 中进行条件自动对焦