提交 9eddd9d8 编写于 作者: Q qiang

fix: merge network request for image

上级 9bd8b86b
...@@ -69,25 +69,12 @@ export default /*#__PURE__*/ defineBuiltInComponent({ ...@@ -69,25 +69,12 @@ export default /*#__PURE__*/ defineBuiltInComponent({
const state = useImageState(rootRef, props) const state = useImageState(rootRef, props)
const trigger = useCustomEvent(rootRef, emit) const trigger = useCustomEvent(rootRef, emit)
const { fixSize } = useImageSize(rootRef, props, state) const { fixSize } = useImageSize(rootRef, props, state)
useImageLoader(state, fixSize, trigger) useImageLoader(state, props, rootRef, fixSize, trigger)
return () => { return () => {
const { mode } = props
const { imgSrc, modeStyle, src } = state
let imgTsx
if (__NODE_JS__) {
imgTsx = <img src={src} draggable={props.draggable} />
} else {
imgTsx = imgSrc ? (
<img src={imgSrc} draggable={props.draggable} />
) : (
<img />
)
}
return ( return (
<uni-image ref={rootRef}> <uni-image ref={rootRef}>
<div style={modeStyle} /> <div style={state.modeStyle} />
{imgTsx} {FIX_MODES[props.mode as keyof typeof FIX_MODES] ? (
{FIX_MODES[mode as keyof typeof FIX_MODES] ? (
// @ts-ignore // @ts-ignore
<ResizeSensor onResize={fixSize} /> <ResizeSensor onResize={fixSize} />
) : ( ) : (
...@@ -136,10 +123,13 @@ function useImageState(rootRef: Ref<HTMLElement | null>, props: ImageProps) { ...@@ -136,10 +123,13 @@ function useImageState(rootRef: Ref<HTMLElement | null>, props: ImageProps) {
function useImageLoader( function useImageLoader(
state: ImageState, state: ImageState,
props: ImageProps,
rootRef: Ref<HTMLElement | null>,
fixSize: FixSize, fixSize: FixSize,
trigger: CustomEventTrigger trigger: CustomEventTrigger
) { ) {
let img: HTMLImageElement | null let img: HTMLImageElement | null
let draggableImg: HTMLImageElement | null
const setState = (width = 0, height = 0, imgSrc = '') => { const setState = (width = 0, height = 0, imgSrc = '') => {
state.origWidth = width state.origWidth = width
state.origHeight = height state.origHeight = height
...@@ -158,6 +148,14 @@ function useImageLoader( ...@@ -158,6 +148,14 @@ function useImageLoader(
const { width, height } = img! const { width, height } = img!
setState(width, height, src) setState(width, height, src)
fixSize() fixSize()
img!.draggable = props.draggable
if (draggableImg) {
draggableImg.remove()
}
draggableImg = img
rootRef.value!.appendChild(img!)
resetImage() resetImage()
trigger('load', evt, { trigger('load', evt, {
width, width,
...@@ -184,6 +182,15 @@ function useImageLoader( ...@@ -184,6 +182,15 @@ function useImageLoader(
() => state.src, () => state.src,
(value) => loadImage(value) (value) => loadImage(value)
) )
watch(
() => state.imgSrc,
(value) => {
if (!value && draggableImg) {
draggableImg.remove()
draggableImg = null
}
}
)
onMounted(() => loadImage(state.src)) onMounted(() => loadImage(state.src))
onBeforeUnmount(() => resetImage()) onBeforeUnmount(() => resetImage())
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册