优雅的算法来控制轮播的最大值

kar*_*vai 7 javascript algorithm

我有一个滑块最多可以显示 3 个元素。如果有更多元素,这些元素将被隐藏,
可以通过单击左右来查看,如下图所示。

在此输入图像描述

该滑块将接收一个位置支柱。请注意,我无法更改此外部组件。

<Slider position={position} />
Run Code Online (Sandbox Code Playgroud)

位置值决定红色位置,如下图所示。

在此输入图像描述

我正在尝试使用一种算法来按照以下规则设置此位置。

如果元素为 3 个或更少,则位置应始终为 0。

更重要的是,它不应该滑过最后一个元素。

这意味着,假设我传入值 4(即索引 4,第 5 个元素)作为位置值,该组件将如下所示。

在此输入图像描述

上面是错误的。它应该如下所示,其中填充了 3 个位置,同时仍然尽可能向左滑动。

因此,如果我将位置值传递为 2,效果会很好。

在此输入图像描述

如果可以接受,也可以按原样使用位置值,而无需按如下方式进行修改。

在此输入图像描述

寻找能够:

获取一个位置值,根据元素数量和最大可见元素数(3)来决定是否可以直接使用还是需要修改。并获取修改后的位置值并将其传递给 Slider 组件。

正在思考以下内容。
根据测试,相信这项工作。正在寻找验证这是否可行。
并建议是否有一种方法可以使其更优雅,并且可能没有
初始 if 检查小于或等于 3 个元素。

// elementCount = // dynamic count of elements.
// initialPosition = // initial position being passed in which needs to be validated.
const getPosition = (elementCount, initialPosition) => {
    if (elementCount <= 3) {
        return 0;
    }
    const maxPosition = elementCount - 3;
    return initialPosition <= maxPosition ? initialPosition : maxPosition;
}
Run Code Online (Sandbox Code Playgroud)

注意:这本质上是一个 React 项目,但考虑到查询与算法更多相关,因此没有对其进行标记。谢谢。