Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/metonym/svelte-img

Responsive image loading component
https://github.com/metonym/svelte-img

aspect-ratio fluid image img loading placeholder responsive

Last synced: about 1 month ago
JSON representation

Responsive image loading component

Awesome Lists containing this project

README

        

# svelte-img

[![NPM][npm]][npm-url]

> Responsive image loading component for Svelte.

This component fades in an image when loaded.

Even with JavaScript disabled, an image can still be loaded without resorting to the `noscript` tag.

---

## Installation

**Yarn**

```bash
yarn add -D svelte-img
```

**NPM**

```bash
npm i -D svelte-img
```

## Usage

### Basic

```svelte

import Img from "svelte-img";
import { tick } from "svelte";

let url =
"https://upload.wikimedia.org/wikipedia/commons/a/a8/Nighthawks_by_Edward_Hopper_1942.jpg";
let src = url;

Nighthawks, 1942 painting by Edward Hopper

Loading...

An error occurred.



Nighthawks, 1942 painting by Edward Hopper

(file size: 8.13 MB)

{
src = undefined;
tick().then(() => (src = url));
}}
>
Reload

(src = url + "1")}>
Simulate error

```

### Responsive placeholder

The component maintains a fluid aspect ratio to avoid [layout jank](https://css-tricks.com/the-fight-against-layout-jank/).

Specify the aspect ratio (width x height) of the image using the `ratio` prop.

For example, an image ratio that has a width of 800px and height of 437px would be `800x437`.

```svelte

```

### Slots

Loading and error states can be displayed using named slots.

```html

Loading...

An error occurred.

```

## API

### Props

| Prop name | Type | Default value |
| :-------------- | :------- | :------------ |
| src | `string` | `undefined` |
| alt | `string` | `""` |
| ratio | `string` | `"16x9"` |
| backgroundColor | `string` | `"#f4f4f4"` |

### Dispatched events

- **on:load**: fired when the image is loaded
- **on:error**: fired if an error occurs

### Forwarded events

The following events are forwarded to the `img` element.

- on:click
- on:mouseover
- on:mouseenter
- on:mouseout

## TypeScript

Svelte version 3.31 or greater is required to use this component with TypeScript.

TypeScript definitions are located in the [types folder](./types).

## Changelog

[Changelog](CHANGELOG.md)

## License

[MIT](LICENSE)

[npm]: https://img.shields.io/npm/v/svelte-img.svg?color=blue&style=for-the-badge
[npm-url]: https://npmjs.com/package/svelte-img