<img class={computedClass} aria-hidden={ariaHidden} {alt} {title} {width} {height} src={displaySrc} on:mouseover="onMouseOver(event)" /> <style> .non-autoplay-zoom-in { cursor: zoom-in; } .non-autoplay-zoom-in.is-link { cursor: pointer; } </style> <script> import { mouseover } from '../_utils/events' import { decodeImage } from '../_utils/decodeImage' import { ONE_TRANSPARENT_PIXEL } from '../_static/media' import { classname } from '../_utils/classname' export default { async oncreate () { let { staticSrc } = this.get() try { await decodeImage(staticSrc) this.set({ displaySrc: staticSrc }) this.fire('imgLoad') } catch (e) { this.fire('imgLoadError', e) } }, methods: { onMouseOver (mouseOver) { let { src, staticSrc, displaySrc } = this.get() if (displaySrc !== ONE_TRANSPARENT_PIXEL) { this.set({ displaySrc: mouseOver ? src : staticSrc }) } } }, events: { mouseover }, data: () => ({ displaySrc: ONE_TRANSPARENT_PIXEL, alt: '', title: '' }), computed: { computedClass: ({className, src, staticSrc, isLink}) => (classname( className, src !== staticSrc && 'non-autoplay-zoom-in', isLink && 'is-link' )) } } </script>