1
- import {
2
- computed ,
3
- defineComponent ,
4
- reactive ,
5
- getCurrentInstance ,
6
- h ,
7
- Transition ,
8
- ref ,
9
- Ref ,
10
- watch ,
11
- nextTick ,
12
- onUnmounted ,
13
- } from 'vue' ;
1
+ import { computed , defineComponent , reactive , h , Transition , ref , watch , nextTick , onUnmounted } from 'vue' ;
14
2
import { CloseIcon , DeleteIcon } from 'tdesign-icons-vue-next' ;
15
3
16
4
import config from '../config' ;
17
5
import props from './props' ;
18
6
import { useDefault , isBrowser , useGesture , DragState , PinchState } from '../shared' ;
19
7
import { useTNodeJSX } from '../hooks/tnode' ;
8
+ import { usePrefixClass } from '../hooks/useClass' ;
20
9
21
10
// inner components
22
11
import { Swiper as TSwiper , SwiperItem as TSwiperItem } from '../swiper' ;
@@ -25,12 +14,11 @@ import { TdImageViewerProps } from './type';
25
14
import { ImageInfo } from './image-viewer-interface' ;
26
15
27
16
const { prefix } = config ;
28
- const name = `${ prefix } -image-viewer` ;
29
17
30
18
const TAP_TIME = 300 ;
31
19
32
20
export default defineComponent ( {
33
- name,
21
+ name : ` ${ prefix } -image-viewer` ,
34
22
components : {
35
23
Transition,
36
24
TSwiper,
@@ -40,6 +28,8 @@ export default defineComponent({
40
28
props,
41
29
emits : [ 'close' , 'index-change' , 'update:visible' , 'update:modelValue' , 'update:index' , 'delete' ] ,
42
30
setup ( props , { emit } ) {
31
+ const imageViewerClass = usePrefixClass ( 'image-viewer' ) ;
32
+
43
33
const state = reactive ( {
44
34
dblTapZooming : false , // double tap zooming
45
35
zooming : false , // pinch zooming
@@ -393,11 +383,11 @@ export default defineComponent({
393
383
< transition name = "fade" >
394
384
{ visible . value && (
395
385
< div ref = { rootRef } class = { `${ prefix } -image-viewer` } >
396
- < div class = { `${ name } __mask` } onClick = { ( e ) => handleClose ( e , 'overlay' ) } />
386
+ < div class = { `${ imageViewerClass . value } __mask` } onClick = { ( e ) => handleClose ( e , 'overlay' ) } />
397
387
< TSwiper
398
388
ref = { swiperRootRef }
399
389
autoplay = { false }
400
- class = { `${ name } __content` }
390
+ class = { `${ imageViewerClass . value } __content` }
401
391
height = "100vh"
402
392
defaultCurrent = { currentIndex . value }
403
393
disabled = { disabled . value }
@@ -407,14 +397,14 @@ export default defineComponent({
407
397
< TSwiperItem
408
398
ref = { ( item : any ) => ( swiperItemRefs . value [ index ] = item ) }
409
399
key = { index }
410
- class = { `${ name } __swiper-item` }
400
+ class = { `${ imageViewerClass . value } __swiper-item` }
411
401
style = { `touch-action: none; align-items:${ info . image . align } ;` }
412
402
>
413
403
{ info . preload ? (
414
404
< img
415
405
src = { info . image . url }
416
406
style = { `
417
- transform: ${ index === state . touchIndex ? imageTransform . value : 'matrix(1, 0, 0, 1, 0, 0)' } ;
407
+ transform: ${ index === state . touchIndex ? imageTransform . value : 'matrix(1, 0, 0, 1, 0, 0)' } ;
418
408
${ imageTransitionDuration . value } ;` }
419
409
onLoad = { ( event : Event ) => onImgLoad ( event , index ) }
420
410
onTransitionstart = { ( event : TransitionEvent ) => {
@@ -434,22 +424,20 @@ export default defineComponent({
434
424
</ TSwiperItem >
435
425
) ) }
436
426
</ TSwiper >
437
- < div class = { `${ name } __nav` } >
438
- { closeNode . value && (
439
- < div class = { `${ name } __nav-close` } onClick = { ( e ) => handleClose ( e , 'close-btn' ) } >
440
- { closeNode . value }
441
- </ div >
442
- ) }
427
+ < div class = { `${ imageViewerClass . value } __nav` } >
428
+ < div class = { `${ imageViewerClass . value } __nav-close` } onClick = { ( e ) => handleClose ( e , 'close-btn' ) } >
429
+ { closeNode . value }
430
+ </ div >
431
+
443
432
{ props . showIndex && (
444
- < div class = { `${ name } __nav-index` } >
433
+ < div class = { `${ imageViewerClass . value } __nav-index` } >
445
434
{ `${ Math . min ( ( currentIndex . value ?? 0 ) + 1 , props . images ?. length ) } /${ props . images ?. length } ` }
446
435
</ div >
447
436
) }
448
- { deleteNode . value && (
449
- < div class = { `${ name } __nav-delete` } onClick = { handleDelete } >
450
- { deleteNode . value }
451
- </ div >
452
- ) }
437
+
438
+ < div class = { `${ imageViewerClass . value } __nav-delete` } onClick = { handleDelete } >
439
+ { deleteNode . value }
440
+ </ div >
453
441
</ div >
454
442
</ div >
455
443
) }
0 commit comments