mirror of
https://git.hmsn.ink/kospo/svcm/oa.git
synced 2026-03-20 18:53:44 +09:00
first
This commit is contained in:
32
src/directives/background.ts
Normal file
32
src/directives/background.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
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,
|
||||
}
|
||||
Reference in New Issue
Block a user