Files
oa/src/directives/background.ts
2025-05-24 01:49:48 +09:00

33 lines
654 B
TypeScript

import type { Directive, DirectiveHook } from 'vue'
const onUpdate: DirectiveHook = (el: HTMLElement, bindings) => {
const src = bindings.value.src
const placeholder = bindings.value.placeholder
if (src) {
const image = new Image()
if (placeholder) {
image.onerror = () => {
image.onerror = null
el.style.backgroundImage = `url(${placeholder})`
}
}
image.onload = () => {
image.onload = null
el.style.backgroundImage = `url(${src})`
}
image.src = src
}
}
export const vBackground: Directive = {
getSSRProps() {
return {}
},
updated: onUpdate,
mounted: onUpdate,
}