1- import React , { MouseEvent , useRef , useState , useEffect } from 'react' ;
1+ import React , { MouseEvent , useRef , useEffect } from 'react' ;
22import { CloseIcon , DeleteIcon } from 'tdesign-icons-react' ;
33import { CSSTransition } from 'react-transition-group' ;
44import { CSSTransitionClassNames } from 'react-transition-group/CSSTransition' ;
@@ -29,29 +29,12 @@ const ImageViewer: React.FC<ImageViewerProps> = (props) => {
2929
3030 const [ show , setShow ] = useDefault < boolean , any > ( visible , defaultVisible , noop ) ;
3131 const [ currentIndex , setCurrentIndex ] = useDefault ( index , defaultIndex , onIndexChange ) ;
32- const [ innerState , setInnerState ] = useState ( {
33- dblTapZooming : false , // double tap zooming
34- zooming : false , // pinch zooming
35- scale : 1 ,
36- touchIndex : 0 ,
37- dragging : false ,
38- draggedX : 0 ,
39- draggedY : 0 ,
40- extraDraggedX : 0 ,
41- } ) ;
4232
4333 const swiperRootRef = useRef < HTMLDivElement > ( null ) ;
4434 const rootRef = useRef < HTMLDivElement > ( null ) ;
4535 const imgRefs = useRef < HTMLImageElement [ ] > ( [ ] ) ;
4636 const duration = 300 ;
47- const { transform, resetTransform, updateTransform, dispatchZoomChange } = useImageTransform (
48- imgRefs ,
49- MIN_SCALE ,
50- MAX_SCALE ,
51- undefined ,
52- // onTransform,
53- // currentIndex,
54- ) ;
37+ const { transform, resetTransform, updateTransform, dispatchZoomChange } = useImageTransform ( MIN_SCALE , MAX_SCALE ) ;
5538 const { isTouching, onTouchStart, onTouchMove, onTouchEnd } = useTouchEvent (
5639 imgRefs ,
5740 movable ,
@@ -70,23 +53,9 @@ const ImageViewer: React.FC<ImageViewerProps> = (props) => {
7053 // eslint-disable-next-line react-hooks/exhaustive-deps
7154 } , [ show ] ) ;
7255
73- const beforeClose = ( ) => {
74- setInnerState ( {
75- ...innerState ,
76- dblTapZooming : false ,
77- zooming : false ,
78- scale : 1 ,
79- dragging : false ,
80- draggedX : 0 ,
81- draggedY : 0 ,
82- extraDraggedX : 0 ,
83- } ) ;
84- } ;
85-
8656 const imageViewerClass = usePrefixClass ( 'image-viewer' ) ;
8757 const handleClose = ( e : MouseEvent , trigger : 'overlay' | 'close-btn' ) => {
8858 e . stopPropagation ( ) ;
89- beforeClose ( ) ;
9059 setShow ( false ) ;
9160 onClose ?.( { trigger, visible : false , index } ) ;
9261 } ;
@@ -124,24 +93,15 @@ const ImageViewer: React.FC<ImageViewerProps> = (props) => {
12493 preload : preloadImageIndex . includes ( index ) ,
12594 } ;
12695 } ) ;
127- // const [imageInfoList, setImageInfoList] = useState(rawImageInfoList)
12896
129- // useEffect(() => {
130- // if (transform.scale === 1 && rawImageInfoList.length !== imageInfoList.length) {
131- //
132- // setImageInfoList(rawImageInfoList);
133- // }
134- // }, [transform, rawImageInfoList, imageInfoList])
135-
136- const onDoubleClick = ( event : MouseEvent ) => {
97+ const onDoubleClick = ( ) => {
13798 if ( show ) {
13899 if ( transform . scale !== 1 ) {
139100 updateTransform ( { x : 0 , y : 0 , scale : 1 } , 'doubleClick' ) ;
140101 } else {
141- dispatchZoomChange ( BASE_SCALE_RATIO + scaleStep , 'doubleClick' , event . clientX , event . clientY ) ;
102+ dispatchZoomChange ( BASE_SCALE_RATIO + scaleStep , 'doubleClick' ) ;
142103 }
143104 }
144- // setImageInfoList([info]);
145105 } ;
146106
147107 const onSwiperChange = ( index : number ) => {
@@ -154,15 +114,6 @@ const ImageViewer: React.FC<ImageViewerProps> = (props) => {
154114 }
155115 } ;
156116
157- // const getImageTransform = () => {
158- // const { scale, draggedX, draggedY } = innerState;
159- // return `matrix(${scale}, 0, 0, ${scale}, ${draggedX}, ${draggedY})`;
160- // };
161- // const getImageTransitionDuration = () => {
162- // const { zooming, dragging } = innerState;
163- // return zooming || dragging ? { transitionDuration: '0s' } : { transitionDuration: '0.3s' };
164- // };
165-
166117 const animationClassNames : CSSTransitionClassNames = {
167118 enterActive : 'fade-enter-active' ,
168119 exitActive : 'fade-leave-active' ,
@@ -202,26 +153,21 @@ const ImageViewer: React.FC<ImageViewerProps> = (props) => {
202153 } }
203154 hostStyle = { { overflow : 'visible' } }
204155 >
205- { /* style={{
206- transform: index === innerState.touchIndex ? getImageTransform() : 'matrix(1, 0, 0, 1, 0, 0)',
207- ...getImageTransitionDuration(),
208- height: '100%',
209- }} */ }
210156 < img
211157 src = { info . image . url }
212158 ref = { ( node ) => {
213159 imgRefs . current [ index ] = node ;
214160 } }
215161 style = { {
216- transform : `matrix(${ transform . scale } , 0, 0, ${ transform . scale } , ${ transform . x } , ${ transform . y } )` ,
162+ transform : `matrix(${ transform . scale } , 0, 0, ${ transform . scale } , ${ transform . x } , 0 )` ,
217163 transitionDuration : isTouching ? '0s' : '.3s' ,
218164 } }
219165 className = { `${ imageViewerClass } __img` }
220166 onTouchStart = { onTouchStart }
221167 onTouchMove = { onTouchMove }
222168 onTouchEnd = { onTouchEnd }
223169 onTouchCancel = { onTouchEnd }
224- onDoubleClick = { ( e ) => onDoubleClick ( e ) }
170+ onDoubleClick = { onDoubleClick }
225171 />
226172 </ TSwiperItem >
227173 ) ) }
0 commit comments