image-evo.vue 715 B

123456789101112131415161718192021222324252627
  1. <script setup lang="ts">
  2. withDefaults(defineProps<{ src?: string; mode?: 'aspectFill' }>(), {})
  3. const emits = defineEmits<{ displayed: [] }>()
  4. const visible = ref(false)
  5. const imgClass = ref('blur-lg transition duration-500 hover:blur-none')
  6. const handleLoad = async () => {
  7. visible.value = true
  8. imgClass.value = 'transition duration-500'
  9. await nextTick(() => {
  10. emits('displayed')
  11. })
  12. }
  13. </script>
  14. <template>
  15. <!-- <div> -->
  16. <wd-img
  17. class="w-full h-full"
  18. width="100%"
  19. height="100%"
  20. :mode="mode"
  21. :style="{ visibility: visible ? 'visible' : 'hidden' }"
  22. :src="src"
  23. :custom-class="`vertical-bottom ${imgClass}`"
  24. @load="handleLoad"
  25. ></wd-img>
  26. <!-- </div> -->
  27. </template>