semaphore/routes/_components/LazyImage.html

54 lines
1.2 KiB
HTML
Raw Normal View History

<div class="lazy-image" style={computedStyle} >
2018-09-01 00:35:26 +01:00
<img
class={className}
aria-hidden={ariaHidden}
{alt}
{title}
{width}
{height}
src={displaySrc}
ref:node
/>
2018-03-14 06:07:30 +00:00
</div>
<style>
.lazy-image {
overflow: hidden;
}
</style>
<script>
2018-03-14 14:24:16 +00:00
import { mark, stop } from '../_utils/marks'
import { decodeImage } from '../_utils/decodeImage'
2018-03-14 14:24:16 +00:00
2018-03-14 06:07:30 +00:00
export default {
async oncreate () {
2018-03-14 14:24:16 +00:00
mark('LazyImage oncreate()')
try {
2018-09-01 00:35:26 +01:00
await decodeImage(this.refs.node)
} catch (e) {
2018-09-01 00:35:26 +01:00
this.set({ error: true })
2018-03-14 14:24:16 +00:00
}
stop('LazyImage oncreate()')
},
data: () => ({
2018-09-01 00:35:26 +01:00
error: false,
fallback: void 0,
background: '',
width: void 0,
height: void 0,
className: '',
ariaHidden: '',
alt: '',
title: ''
}),
computed: {
computedStyle: ({ width, height, background }) => {
return [
width && `width: ${width}px;`,
height && `height: ${height}px;`,
background && `background: ${background};`
].filter(Boolean).join('')
2018-09-01 00:35:26 +01:00
},
displaySrc: ({ error, src, fallback }) => ((error && fallback) || src)
}
2018-03-14 06:07:30 +00:00
}
</script>