Skip to content

Commit 0343fb1

Browse files
committed
fix: 修复只有一张图片开启loop为true的bug #141
1 parent b7ea23e commit 0343fb1

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

packages/react-photo-view/src/PhotoSlider.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ export default function PhotoSlider(props: IPhotoSliderProps) {
463463
</div>
464464
</div>
465465
)}
466-
{adjacentImages.map((item: DataType, currentIndex) => {
466+
{adjacentImages.map((item, currentIndex) => {
467467
// 截取之前的索引位置
468468
const nextIndex =
469469
!enableLoop && index === 0
@@ -493,7 +493,7 @@ export default function PhotoSlider(props: IPhotoSliderProps) {
493493
loadingElement={loadingElement}
494494
brokenElement={brokenElement}
495495
onPhotoResize={handleResize}
496-
isActive={(currentImage && currentImage.key) === item.key}
496+
isActive={!item.isCloned && (currentImage && currentImage.key) === item.key}
497497
expose={updateState}
498498
enableMouseZoom={enableMouseZoom}
499499
/>

packages/react-photo-view/src/hooks/useAdjacentImages.ts

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,42 @@
11
import { useMemo } from 'react'
22
import type { DataType } from '../types'
33

4+
interface AdjacentDataType extends DataType {
5+
/**
6+
* 是否是克隆的
7+
*/
8+
isCloned?: boolean
9+
}
10+
411
/**
512
* 截取相邻三张图片
613
*/
7-
export default function useAdjacentImages(images: DataType[], index: number, loop: boolean) {
14+
export default function useAdjacentImages(
15+
images: DataType[],
16+
index: number,
17+
loop: boolean,
18+
): AdjacentDataType[] {
819
return useMemo(() => {
920
const imageLength = images.length
1021
if (loop) {
1122
const connected = images.concat(images).concat(images)
12-
return connected.slice(imageLength + index - 1, imageLength + index + 2)
23+
const currentImage = connected[imageLength + index]
24+
const sliceImages: AdjacentDataType[] = connected.slice(
25+
imageLength + index - 1,
26+
imageLength + index + 2,
27+
)
28+
29+
const adjacentImages: AdjacentDataType[] = []
30+
31+
for (let i = 0; i < sliceImages.length - 1; i++) {
32+
const image = sliceImages[i]
33+
if (i !== 1 && image.key === currentImage.key) {
34+
adjacentImages.push({ ...image, isCloned: true })
35+
} else {
36+
adjacentImages.push(image)
37+
}
38+
}
39+
return adjacentImages
1340
}
1441
return images.slice(Math.max(index - 1, 0), Math.min(index + 2, imageLength + 1))
1542
}, [images, index, loop])

0 commit comments

Comments
 (0)