我想做一个灯箱,
我有一个缩略图轮播在底部的图像,你点击改变显示的图像。我想让它,当你点击任何缩略图,它滚动到页面的中心,使它看起来像选定的元素仍然不断在屏幕的中心。
到目前为止,我所做的是向ThumbnailViewer容器添加了一个动态左填充。
const ThumbnailViewer = (props) => {
const {
images = [],
currentImage = 0,
thumbnailWidth
} = useContext(LightboxContext);
const getThumbnailViewerPaddingLeft = () => {
if (thumbnailWidth) {
return `calc(95vw - ${(thumbnailWidth * (currentImage + 1))}px)`
}
}
const getThumbnailViewerPaddingRight = () => {
if (thumbnailWidth) {
return `calc(95vw - ${thumbnailWidth}px)`
}
}
return (
<div className={styles.thumbnailViewer} style={{ paddingLeft: getThumbnailViewerPaddingLeft() }}>
{images.map((el, i) => <ThumbnailIcon img={el.src} alt={el.alt} selected={i == currentImage} current={i} />)}
</div>
)
字符串
}
我无法让它居中,正如你在下面的GIF中看到的,我不确定这种方法是否正确。我想动态地减少左填充,然后不断地添加右填充,这样当点击最右边的元素时,它也会到达中心。
的数据
有人能帮助我,如果我在正确的道路上,或者有一个更好的方法来做到这一点?
2条答案
按热度按时间lxkprmvk1#
实现这一点的最佳方法是拥有这样的布局,并在每次单击时更新transform属性。
这样做将是高效的,因为组件将不必须重新呈现。您可以使用refs来更新DOM. Checkout(refs和forwardRefs)。
iovurdzv2#
依靠缩略图宽度和调整填充可能不是最有效的方法。更有效的方法是利用图像的数组索引。当用户单击缩略图时,您可以将该缩略图重新定位到数组的中间。这样,如果您希望用户在单击左侧或右侧缩略图时始终保持居中,您可以简单地相应地修改数组。此方法提供了更动态和响应更快的用户体验