|
@@ -1,5 +1,16 @@
|
|
|
<template>
|
|
<template>
|
|
|
- <div class="flex items-center" @click.stop="like()">
|
|
|
|
|
|
|
+ <div class="flex items-center relative" @click.stop="like()">
|
|
|
|
|
+ <div class="absolute bottom-0 left-[-20px]">
|
|
|
|
|
+ <Vue3Lottie
|
|
|
|
|
+ ref="likeRef"
|
|
|
|
|
+ :animationData="likeJSON"
|
|
|
|
|
+ v-if="showLike"
|
|
|
|
|
+ @onComplete="showLike = false"
|
|
|
|
|
+ :loop="false"
|
|
|
|
|
+ :height="100"
|
|
|
|
|
+ :width="60"
|
|
|
|
|
+ />
|
|
|
|
|
+ </div>
|
|
|
<img class="w-[24px] animate__animated" ref="imgRef" :src="liked ? likePreImg : likeImg" alt="" />
|
|
<img class="w-[24px] animate__animated" ref="imgRef" :src="liked ? likePreImg : likeImg" alt="" />
|
|
|
<span class="text-[#797A8A] text-xs" :class="{ 'text-[#FF3F71]': liked }">
|
|
<span class="text-[#797A8A] text-xs" :class="{ 'text-[#FF3F71]': liked }">
|
|
|
<slot></slot>
|
|
<slot></slot>
|
|
@@ -12,6 +23,9 @@ import '@/styles/animate.css'
|
|
|
import { ref } from 'vue'
|
|
import { ref } from 'vue'
|
|
|
import likePreImg from '@/assets/icon_dianzhan-pre.png'
|
|
import likePreImg from '@/assets/icon_dianzhan-pre.png'
|
|
|
import likeImg from '@/assets/icon_dianzhan.png'
|
|
import likeImg from '@/assets/icon_dianzhan.png'
|
|
|
|
|
+import { Vue3Lottie } from 'vue3-lottie'
|
|
|
|
|
+import 'vue3-lottie/dist/style.css'
|
|
|
|
|
+import likeJSON from '@/assets/lottie/like.json'
|
|
|
|
|
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
|
liked: {
|
|
liked: {
|
|
@@ -25,6 +39,7 @@ interface Emit {
|
|
|
}
|
|
}
|
|
|
const emit = defineEmits<Emit>()
|
|
const emit = defineEmits<Emit>()
|
|
|
const imgRef = ref(null as any)
|
|
const imgRef = ref(null as any)
|
|
|
|
|
+const showLike = ref(false)
|
|
|
|
|
|
|
|
function like() {
|
|
function like() {
|
|
|
if (imgRef.value) {
|
|
if (imgRef.value) {
|
|
@@ -33,6 +48,9 @@ function like() {
|
|
|
imgRef.value.className = imgRef.value.className.replace(/ animate__tada/, '')
|
|
imgRef.value.className = imgRef.value.className.replace(/ animate__tada/, '')
|
|
|
}, 800)
|
|
}, 800)
|
|
|
}
|
|
}
|
|
|
|
|
+ if (!props.liked) {
|
|
|
|
|
+ showLike.value = true
|
|
|
|
|
+ }
|
|
|
emit('like')
|
|
emit('like')
|
|
|
}
|
|
}
|
|
|
</script>
|
|
</script>
|