在html中创建范围滑块
create range slider in html
我有一个显示一个值的范围滑块,但我希望显示两个限制,即最小和最大,类似于价格范围滑块,然后将最小和最大值保存在数据库中,但目前我只有一个值。
通过js可以制作各种滑块,但我想知道这个代码是否可以修改为在单个滑块(@fiddle)上同时具有最大值和最小值
<body>
<form>
<input type="range" name="amountRange" min="0" max="20" value="0" oninput="this.form.amountInput.value=this.value" />
<input type="number" name="amountInput" min="0" max="20" value="0" oninput="this.form.amountRange.value=this.value" />
</form>
</body>
您可以自己创建一个小部件。
总体思路:
-
标记和Javscript:
- 在小部件的容器中有两个范围输入
- 使用容器上的数据属性来保存两个值,例如
data-lbound
用于存储较低的值,data-ubound
用于存储较高的值 - 在范围输入的
input
事件上更新容器的数据属性 - 使用这些数据属性可以在表单提交或任何其他用途所需的任何时间检索值
-
CSS:
- 使用绝对定位将两个量程输入放置在容器内的顶部
- 设置范围输入的样式,使其拇指向上移动一点,这样重叠的范围输入就不会妨碍其使用
- 如果需要,隐藏滑块/条/轨迹
- 在容器上创建一个
::after
伪元素,其content
属性设置为容器的数据属性。这将用于显示当前范围 - 休息就是美化范围输入
这是我创建的一个小演示。(使用Chrome或Firefox进行测试)也适用于键盘。
Fiddle:http://jsfiddle.net/abhitalks/a1f1k8d0/2/
代码段:
.multi-range, .multi-range * { box-sizing: border-box; padding: 0; margin: 0; }
.multi-range {
position: relative; width: 160px; height: 28px; margin: 16px;
border: 1px solid #ddd; font-family: monospace;
}
.multi-range > hr { position: absolute; width: 100%; top: 50%; }
.multi-range > input[type=range] {
width: calc(100% - 16px);
position: absolute; bottom: 6px; left: 0;
}
.multi-range > input[type=range]:last-of-type { margin-left: 16px; }
.multi-range > input[type=range]::-webkit-slider-thumb { transform: translateY(-18px); }
.multi-range > input[type=range]::-webkit-slider-runnable-track { -webkit-appearance: none; height: 0px; }
.multi-range > input[type=range]::-moz-range-thumb { transform: translateY(-18px); }
.multi-range > input[type=range]::-moz-range-track { -webkit-appearance: none; height: 0px; }
.multi-range > input[type=range]::-ms-thumb { transform: translateY(-18px); }
.multi-range > input[type=range]::-ms-track { -webkit-appearance: none; height: 0px; }
.multi-range::after {
content: attr(data-lbound) ' - ' attr(data-ubound);
position: absolute; top: 0; left: 100%; white-space: nowrap;
display: block; padding: 0px 4px; margin: -1px 2px;
height: 26px; width: auto; border: 1px solid #ddd;
font-size: 13px; line-height: 26px;
}
<div class='multi-range' data-lbound='10' data-ubound='50'>
<hr />
<input type='range'
min='10' max='45' step='5' value='10'
oninput='this.parentNode.dataset.lbound=this.value;'
/>
<input type='range'
min='15' max='50' step='5' value='50'
oninput='this.parentNode.dataset.ubound=this.value;'
/>
</div>
注意: 上面的演示很好,只是一个演示。它将在Chrome和Firefox中完美工作,但我无法在IE/Edge中测试它。我的感觉是IE/Edge会有问题,因为在那些浏览器中,滑块拇指与音轨对齐。您可以进一步自定义和样式化它,以使用IE/Edge
相关文章:
- 从指定范围创建字符数组
- 如何创建一个方法来验证数组的范围
- 将值添加到使用_.map&_创建的变量中.范围
- 我怎样才能创建一个函数expr;t继承词法范围
- 使用javascript中的var关键字创建块范围的变量
- 使用范围作为 id 在传单中创建地图
- 我可以设置这个吗'某事'在该服务中动态创建的嵌套对象中的服务?(可能是范围问题)
- 需要创建一个函数,将我自己创建的范围对象转换为字符串
- Google Sheets-使用脚本创建范围(行)
- 如何创建带有多个标记的谷歌地图,从当前位置到10公里的矩形范围
- 创建新的范围示例
- HTML5:如何创建一个“;范围输入类型“;具有动态值
- 如何在范围内创建全局函数
- 如何使用CSS3和Javascript创建双范围滑块
- Jquery范围滑块如何创建自己的序列
- 在多个节点上创建范围
- 创建可在任何地方使用的 JS 函数?范围和功能“未定义”的问题
- 创建高图表点击功能时丢失了 Angularjs 范围
- 创建使用用户输入的数字范围生成的随机数.(JavaScript)
- JavaScript 全局不保留范围?创建自动完成 Web 服务 JSON 对象