image-format.vue 1 KB
<template>
  <img v-lazy="currentSrc" :alt="alt" v-if="currentLazy" @error="onError">
  <img :src="currentSrc" :alt="alt" v-else lazy="" data-src="" @error="onError">
</template>

<script>
import {mapState} from 'vuex';
import {processImage} from 'utils/image-handler';

export default {
  name: 'ImageFormat',
  props: {
    lazy: {
      type: Boolean,
      default: true
    },
    src: String,
    width: [Number, String],
    height: [Number, String],
    mode: {
      type: [Number, String],
      default: 2
    },
    alt: String,
    interlace: Boolean
  },
  data() {
    return {
      refresh: false,
      currentLazy: this.lazy
    };
  },
  watch: {
    src() {
      this.currentLazy = false;
    },
    lazy(val) {
      this.currentLazy = val;
    }
  },
  computed: {
    ...mapState(['yoho']),
    currentSrc() {
      return processImage(this.src, this.mode, this.width, this.height, this.yoho.window.supportWebp);
    }
  },
  methods: {
    onError() {
      this.$emit('error');
    }
  }
};
</script>