commit
17a28c0f68
@ -0,0 +1,60 @@ |
||||
import {FC, useEffect, useState} from "react"; |
||||
import {Image, View} from "@tarojs/components"; |
||||
import emptyImg from '@/static/img/empty.png' |
||||
import {AtActivityIndicator} from "taro-ui"; |
||||
|
||||
interface Props { |
||||
src: string |
||||
mode?: "scaleToFill" | "aspectFit" | "aspectFill" | "widthFix" | "heightFix" | "top" | "bottom" | "center" | "left" | "right" | "top left" | "top right" | "bottom left" | "bottom right" | undefined |
||||
width:number |
||||
height:number |
||||
fallback?: string |
||||
} |
||||
|
||||
const Img: FC<Props> = ({src,mode = 'aspectFill',width,height,fallback = emptyImg}) => { |
||||
const [isError,setIsError] = useState(false) |
||||
const [loading,setLoading] = useState(true) |
||||
|
||||
useEffect(()=>{ |
||||
console.log(src, !src) |
||||
if(!src){ |
||||
setIsError(true) |
||||
setLoading(false) |
||||
} else { |
||||
setIsError(false) |
||||
setLoading(false) |
||||
} |
||||
},[src]) |
||||
// 图片加载失败
|
||||
function onErrorHandler() { |
||||
setLoading(false) |
||||
setIsError(true) |
||||
} |
||||
function onLoadHandler() { |
||||
setLoading(false) |
||||
setIsError(false) |
||||
} |
||||
|
||||
return ( |
||||
<View style={{width:`${width}rpx`,height:`${height}rpx`,backgroundColor:'eee'}}> |
||||
{ !isError && |
||||
<Image |
||||
src={src} |
||||
mode={mode} |
||||
style={{width:`${width}rpx`,height:`${height}rpx`}} |
||||
onError={onErrorHandler} |
||||
onLoad={onLoadHandler}> |
||||
</Image> |
||||
} |
||||
{ loading && |
||||
<AtActivityIndicator mode={"center"} content='加载中...'></AtActivityIndicator> |
||||
} |
||||
{ isError && !loading && |
||||
<Image mode={'aspectFill'} src={fallback} style={{width:`${width}rpx`,height:`${height}rpx`}}></Image> |
||||
} |
||||
|
||||
</View> |
||||
) |
||||
} |
||||
|
||||
export default Img |
Loading…
Reference in new issue