|
@@ -5,6 +5,7 @@ import { CloseOutlined } from '@ant-design/icons'
|
|
|
import { isMobileFu } from '@/utils/history'
|
|
|
import { domShowFu } from '@/utils/domShow'
|
|
|
import ImagePreview, { ImagePreviewRef } from '@/components/ImagePreview'
|
|
|
+import openEggImg from '@/assets/img/openEgg.png'
|
|
|
|
|
|
type Props = {
|
|
|
closeFu: () => void
|
|
@@ -12,22 +13,37 @@ type Props = {
|
|
|
}
|
|
|
|
|
|
function A2openEgg({ closeFu, url }: Props) {
|
|
|
- // 先隐藏图片,等图片loding完
|
|
|
- const [imgShow, setImgShow] = useState(false)
|
|
|
+ // 把砸开彩蛋的图片转成blob url
|
|
|
+ const [apngUrl, setApngUrl] = useState<string | null>(null)
|
|
|
|
|
|
- useEffect(() => {
|
|
|
- if (imgShow) {
|
|
|
+ const lodingImgFu = useCallback(async () => {
|
|
|
+ domShowFu('#AsyncSpinLoding', true)
|
|
|
+ try {
|
|
|
+ // 注意:这里的路径需要是最终可以被公开访问的路径,或者通过require得到的路径
|
|
|
+ const response = await fetch(openEggImg) // openEggImg 是 import 得到的路径
|
|
|
+ const blob = await response.blob()
|
|
|
+ const blobUrl = URL.createObjectURL(blob)
|
|
|
domShowFu('#AsyncSpinLoding', false)
|
|
|
+ setApngUrl(blobUrl)
|
|
|
setTimeout(() => {
|
|
|
setMoveEnd(true)
|
|
|
- }, 2200)
|
|
|
- } else {
|
|
|
- domShowFu('#AsyncSpinLoding', true)
|
|
|
+ }, 1700)
|
|
|
+ } catch (error) {
|
|
|
+ domShowFu('#AsyncSpinLoding', false)
|
|
|
+ console.error('Failed to fetch APNG:', error)
|
|
|
}
|
|
|
- }, [imgShow])
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ lodingImgFu()
|
|
|
+ }, [lodingImgFu])
|
|
|
|
|
|
const [moveEnd, setMoveEnd] = useState(false)
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
+ if (moveEnd) URL.revokeObjectURL(apngUrl!)
|
|
|
+ }, [apngUrl, moveEnd])
|
|
|
+
|
|
|
const imagePreviewRef = useRef<ImagePreviewRef>(null)
|
|
|
|
|
|
// 查看图片
|
|
@@ -49,19 +65,14 @@ function A2openEgg({ closeFu, url }: Props) {
|
|
|
{isMobileFu() ? null : <ImagePreview ref={imagePreviewRef} />}
|
|
|
|
|
|
<div className='A2Omain'>
|
|
|
- {/* 先进行一段动画,然后显示图片。待完善 */}
|
|
|
- {moveEnd ? null : (
|
|
|
+ {/* 先进行一段动画,然后显示图片 */}
|
|
|
+ {moveEnd && apngUrl ? null : (
|
|
|
<div className='A2OimgMove'>
|
|
|
- <img
|
|
|
- style={{ opacity: imgShow ? 1 : 0 }}
|
|
|
- onLoad={() => setImgShow(true)}
|
|
|
- src={require('@/assets/img/openEgg.png')}
|
|
|
- alt=''
|
|
|
- />
|
|
|
+ <img style={{ opacity: apngUrl ? 1 : 0 }} src={apngUrl!} alt='' />
|
|
|
</div>
|
|
|
)}
|
|
|
|
|
|
- {imgShow ? (
|
|
|
+ {apngUrl ? (
|
|
|
<div className='A2OimgShow' style={{ opacity: moveEnd ? 1 : 0 }}>
|
|
|
<Image
|
|
|
onClick={lookImgFu}
|