HTML 范围输入,较大的值在范围输入中占用较少的空间

标签 html

这很难用语言来解释。我画了一张粗略的图来说明我的意思:

enter image description here

假设我们有一个 input=range 元素,其中 min=0max=100step=1.

默认情况下,步数是均匀分布的。因此范围值 50 将位于元素的中间。

我希望元素中间的范围值为 25。这意味着前 25 步占据 50% 的范围,其余 75 步占据剩余的 50% 范围。

有什么办法可以实现吗?

最佳答案

范围输入始终是线性的,并且没有内置其他曲线选项。您必须自己计算该曲线。

让我们首先将您的输入范围修改为从 01

<input type="range" min="0" max="1" step="0.01" />

获得所需曲线的一种简单方法是使用正弦函数。通过将该值乘以 PI/2,我们最终得到了理想的曲线:

Sine Curve from 0 to 1

(你可以 fiddle with it on Wolfram Alpha .)

这很容易用 JavaScript 实现:

document.querySelector('input').addEventListener('input', (e) => {
  console.log(Math.sin(e.target.value * Math.PI/2));
});

我在 JSFiddle 上放了一个完整的例子,带有 SVG 可视化:https://jsfiddle.net/rexLoczj/1/

关于HTML 范围输入,较大的值在范围输入中占用较少的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55425581/

相关文章:

jquery - 一次迭代一个子元素

javascript - Jquery 在 .hover() 上显示和隐藏 div

javascript - 在 JavaScript 等式中使用 HTML 文本框中的数字

javascript - html5 canvas中的碰撞检测

html - 滚动时如何让内容消失/隐藏在透明标题后面

html - 高度为 100% 的包装器显示滚动条

html - Twitter Bootstrap - DIV 绝对位置到图像响应放大

html - 将字体保持在 float 左 div 中以保持在左边距

javascript - 如何让我的动画在无限循环中从左向右移动?

javascript - 使用 FancyBox 出现 jQuery 未定义错误