61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
|
|
export default function getInterleavedFrames(imageIds) {
|
||
|
|
const minImageIdIndex = 0;
|
||
|
|
const maxImageIdIndex = imageIds.length - 1;
|
||
|
|
|
||
|
|
const middleImageIdIndex = Math.floor(imageIds.length / 2);
|
||
|
|
|
||
|
|
let lowerImageIdIndex = middleImageIdIndex;
|
||
|
|
let upperImageIdIndex = middleImageIdIndex;
|
||
|
|
|
||
|
|
// Build up an array of images to prefetch, starting with the current image.
|
||
|
|
const imageIdsToPrefetch = [
|
||
|
|
{ imageId: imageIds[middleImageIdIndex], imageIdIndex: middleImageIdIndex },
|
||
|
|
];
|
||
|
|
|
||
|
|
const prefetchQueuedFilled = {
|
||
|
|
currentPositionDownToMinimum: false,
|
||
|
|
currentPositionUpToMaximum: false,
|
||
|
|
};
|
||
|
|
|
||
|
|
// Check if on edges and some criteria is already fulfilled
|
||
|
|
|
||
|
|
if (middleImageIdIndex === minImageIdIndex) {
|
||
|
|
prefetchQueuedFilled.currentPositionDownToMinimum = true;
|
||
|
|
} else if (middleImageIdIndex === maxImageIdIndex) {
|
||
|
|
prefetchQueuedFilled.currentPositionUpToMaximum = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
while (
|
||
|
|
!prefetchQueuedFilled.currentPositionDownToMinimum ||
|
||
|
|
!prefetchQueuedFilled.currentPositionUpToMaximum
|
||
|
|
) {
|
||
|
|
if (!prefetchQueuedFilled.currentPositionDownToMinimum) {
|
||
|
|
// Add imageId bellow
|
||
|
|
lowerImageIdIndex--;
|
||
|
|
imageIdsToPrefetch.push({
|
||
|
|
imageId: imageIds[lowerImageIdIndex],
|
||
|
|
imageIdIndex: lowerImageIdIndex,
|
||
|
|
});
|
||
|
|
|
||
|
|
if (lowerImageIdIndex === minImageIdIndex) {
|
||
|
|
prefetchQueuedFilled.currentPositionDownToMinimum = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!prefetchQueuedFilled.currentPositionUpToMaximum) {
|
||
|
|
// Add imageId above
|
||
|
|
upperImageIdIndex++;
|
||
|
|
imageIdsToPrefetch.push({
|
||
|
|
imageId: imageIds[upperImageIdIndex],
|
||
|
|
imageIdIndex: upperImageIdIndex,
|
||
|
|
});
|
||
|
|
|
||
|
|
if (upperImageIdIndex === maxImageIdIndex) {
|
||
|
|
prefetchQueuedFilled.currentPositionUpToMaximum = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return imageIdsToPrefetch;
|
||
|
|
}
|