javascript - 反应自定义滑块 - 在滑块上显示气泡值
问题描述
我正在创建一个动态滑块(希望如此!)这是我到目前为止所拥有的 -代码框
这是我的滑块组件:
const RangeSlider = ({ classes, label, onChange, value, ...sliderProps }) => {
const newValue = ((value - sliderProps.min) * 100) / (sliderProps.max - sliderProps.min);
const newPosition = 10 - newValue * 0.2;
return (
<div className={styles.slider}>
<p>{label}</p>
<p>{sliderProps.min}</p>
<div className={styles.rangeWrap}>
<div className={styles.rangeValue} id={"rangeV"}>
<span style={{ left: `calc(${newValue}% + (${newPosition}px))` }}>{value}</span>
</div>
<input
{...sliderProps}
type={"range"}
value={value}
className={`slider ${classes}`}
id={"myRange"}
onChange={onChange}
/>
</div>
<p>{sliderProps.max}</p>
</div>
);
};
上面的这个组件在其父组件中的使用如下:
const [sliderProps, setSliderProps] = useState({
min: 0,
max: 100,
value: 20,
label: "This is a reusable slider",
});
const [sliderValue, setSliderValue] = useState(0);
const handleSliderChange = e => {
setSliderValue(e.target.value);
};
....
.....
.....
<RangeSlider
{...sliderProps}
classes={styles.slider}
onChange={handleSliderChange}
value={sliderValue}
/>
我似乎无法正确计算气泡值。正如您在沙箱中看到的那样,滑块顶部的气泡正向相反方向移动。我想要的是让它在移动/滑动时在滑块顶部同步。我究竟做错了什么?任何帮助将不胜感激!!
解决方案
正如我在评论中所说,您需要检测屏幕宽度来调整比率值。像这个工作示例这样的东西。
const size = useWindowSize();
const ratio = size.width / 100 - 0.35;
const newPosition = 10 + newValue * ratio;
我刚刚从这里useWindowSize
抓了一个钩子,但是欢迎您使用您认为适合的任何其他方法来检测窗口宽度,但我建议您现在使用钩子作为它的标准(至少现在)。
FWIW。我还调整了范围换行width:100%
,而不是硬编码为 500px,这样它就可以调整大小(也更好一点)
.rangeWrap {
position: relative;
width: 100%;
}
更新,根据您的其他评论:
您可以更新 ratio calc 以适应仅在页面布局的某些部分中存在的滑块。在您的更新中,您有一个 2 列布局,所以我会这样做。
// breakpoint at which the layout shifts
const isDesktop = size.width > 770;
// mobile has a 1 col layout
const cols = isDesktop ? 2 : 1
// this seems to need some slightly
// different values at the different layouts to look decent
const pxShift = isDesktop ? 0.4 : 0.5;
// voila!
const ratio = size.width / cols / 100 - pxShift;
只是要清楚...您不必使用页面宽度..主要是您需要以某种方式找到滑块所在容器的宽度,然后根据该容器宽度进行计算。页面宽度是最快想到的,但可能有更好的解决方案。
推荐阅读
- ios - 是否可以编写返回文本视图 HStack 的 func、方法、结构、扩展、类?
- pandas - 从 Pandas 中的给定索引中获取行号
- c# - 使用远程验证、MVC 和 Razor Pages .NET Core 2.2 ::: "InvalidOperationException: 找不到远程验证的 URL" 失败
- java - 如何用 Java 在 Mac 上捕获 Command Z KeyStroke
- containers - 非容器中的容器和 Racket 中的黑客合同
- php - 在php或laravel中检测包含所有空字符串属性值的对象
- python - Keras Sequence2Sequence 示例内存不足
- spring - 我应该使用自定义 DTO 响应类作为抽象吗?或者有没有办法包装/装饰 ResponseEntity?
- cordova - 由于无法读取未定义的属性“onTokenRefresh”,我无法在离子应用程序中获取设备令牌
- css - 在我的 React 应用程序的页脚添加“display: flex”会在其下方添加空格,为什么会这样?