@ -1,5 +1,5 @@
import { XIcon } from "lucide-react" ;
import { XIcon } from "lucide-react" ;
import React , { use State } from "react" ;
import React , { use Effect, use State } from "react" ;
import { generateDialog } from "./Dialog" ;
import { generateDialog } from "./Dialog" ;
import "@/less/preview-image-dialog.less" ;
import "@/less/preview-image-dialog.less" ;
@ -31,7 +31,7 @@ const PreviewImageDialog: React.FC<Props> = ({ destroy, imgUrls, initialIndex }:
let endX = - 1 ;
let endX = - 1 ;
const handleCloseBtnClick = ( ) = > {
const handleCloseBtnClick = ( ) = > {
destroy ( ) ;
destroy AndResetViewport ( ) ;
} ;
} ;
const handleTouchStart = ( event : React.TouchEvent ) = > {
const handleTouchStart = ( event : React.TouchEvent ) = > {
@ -73,7 +73,7 @@ const PreviewImageDialog: React.FC<Props> = ({ destroy, imgUrls, initialIndex }:
setState ( defaultState ) ;
setState ( defaultState ) ;
setCurrentIndex ( currentIndex - 1 ) ;
setCurrentIndex ( currentIndex - 1 ) ;
} else {
} else {
destroy ( ) ;
destroy AndResetViewport ( ) ;
}
}
} ;
} ;
@ -82,7 +82,7 @@ const PreviewImageDialog: React.FC<Props> = ({ destroy, imgUrls, initialIndex }:
setState ( defaultState ) ;
setState ( defaultState ) ;
setCurrentIndex ( currentIndex + 1 ) ;
setCurrentIndex ( currentIndex + 1 ) ;
} else {
} else {
destroy ( ) ;
destroy AndResetViewport ( ) ;
}
}
} ;
} ;
@ -107,11 +107,36 @@ const PreviewImageDialog: React.FC<Props> = ({ destroy, imgUrls, initialIndex }:
} ) ;
} ) ;
} ;
} ;
const setViewportScalable = ( ) = > {
const viewport = document . querySelector ( "meta[name=viewport]" ) ;
if ( viewport ) {
const contentAttrs = viewport . getAttribute ( "content" ) ;
if ( contentAttrs ) {
viewport . setAttribute ( "content" , contentAttrs . replace ( "user-scalable=no" , "user-scalable=yes" ) ) ;
}
}
} ;
const destroyAndResetViewport = ( ) = > {
const viewport = document . querySelector ( "meta[name=viewport]" ) ;
if ( viewport ) {
const contentAttrs = viewport . getAttribute ( "content" ) ;
if ( contentAttrs ) {
viewport . setAttribute ( "content" , contentAttrs . replace ( "user-scalable=yes" , "user-scalable=no" ) ) ;
}
}
destroy ( ) ;
} ;
const imageComputedStyle = {
const imageComputedStyle = {
transform : ` scale( ${ state . scale } ) ` ,
transform : ` scale( ${ state . scale } ) ` ,
transformOrigin : ` ${ state . originX === - 1 ? "center" : ` ${ state . originX } px ` } ${ state . originY === - 1 ? "center" : ` ${ state . originY } px ` } ` ,
transformOrigin : ` ${ state . originX === - 1 ? "center" : ` ${ state . originX } px ` } ${ state . originY === - 1 ? "center" : ` ${ state . originY } px ` } ` ,
} ;
} ;
useEffect ( ( ) = > {
setViewportScalable ( ) ;
} , [ ] ) ;
return (
return (
< >
< >
< div className = "btns-container" >
< div className = "btns-container" >