fix(web): use native image decoder (#3074)

Co-authored-by: Jason Rasmussen <jrasm91@gmail.com>
Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
Thomas 2023-11-29 15:09:22 +00:00 committed by GitHub
parent e5d083fe79
commit 696900228b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 48 deletions

View file

@ -1,38 +0,0 @@
import { tick } from 'svelte';
import type { ActionReturn } from 'svelte/action';
interface Attributes {
'on:image-error'?: (e: CustomEvent) => void;
'on:image-load'?: (e: CustomEvent) => void;
}
export function imageLoad(img: HTMLImageElement): ActionReturn<void, Attributes> {
const onImageError = () => img.dispatchEvent(new CustomEvent('image-error'));
const onImageLoaded = () => img.dispatchEvent(new CustomEvent('image-load'));
if (img.complete) {
// Browser has fetched the image, naturalHeight is used to check
// if any loading errors have occurred.
const loadingError = img.naturalHeight === 0;
// Report status after a tick, to make sure event listeners are registered.
if (loadingError) {
tick().then(onImageError);
} else {
tick().then(onImageLoaded);
}
return {};
}
// Image has not been loaded yet, report status with event listeners.
img.addEventListener('load', onImageLoaded, { once: true });
img.addEventListener('error', onImageError, { once: true });
return {
destroy() {
img.removeEventListener('load', onImageLoaded);
img.removeEventListener('error', onImageError);
},
};
}