javascript - 使用不同选项对范围滑块进行编程的替代方法
问题描述
我正在尝试用 Javascript 编写带有样式数据列表选项的自定义范围滑块。如果您在条上的不同值(例如:780mn、785nm、808nm 等)上滑动选择器,则特定于这些值的不同信息将显示在下方,并且您当前所在的值将突出显示。这是滑块外观的示例图像:https ://i.stack.imgur.com/5LH2X.png 。
我目前已将其设置为 type=range 的输入,不同的点是 datalist 选项。然而,根据我的研究,编辑数据列表的 CSS 是非常特定于浏览器的。有没有人对我如何编程这个功能有任何建议,因为我被踩到了?提前致谢!!
我当前的代码如下:
<div>
<input type="range" min="780" max="1070" value="780" list="wavelenghtOptions" class="slider" id="sliderRange" />
<datalist id="wavelenghtOptions">
<option value="780" label="780">
<option value="785" label="785">
<option value="808" label="808">
<option value="830" label="830">
<option value="852" label="852">
<option value="905" label="905">
<option value="915" label="915">
<option value="940" label="940">
<option value="945" label="945">
<option value="957" label="957">
<option value="1064" label="1064">
<option value="1070" label="1070">
</datalist>
<div>
<div>
<h3><span id="waveTitle"></span> nm</h3>
<p id="waveDescription"></p>
</div>
<div>
<h3>Legend</h3>
<ul>
<li>Single-mode</li>
<li>Multimode</li>
</ul>
</div>
</div>
<script>
var slider = document.getElementById("sliderRange");
var titleOutput = document.getElementById("waveTitle");
var descriptionOutput = document.getElementById("waveDescription");
var wavelengths = [
{
range:780,
description:"This is a description for the 780 nm range.",
},
{
range:785,
description:"This is a description for the 785 nm range.",
},
{
range:808,
description:"This is a description for the 808 nm range.",
},
{
range:830,
description:"This is a description for the 830 nm range.",
},
{
range:852,
description:"This is a description for the 852 nm range.",
},
{
range:905,
description:"This is a description for the 905 nm range.",
},
{
range:915,
description:"This is a description for the 915 nm range.",
},
{
range:940,
description:"This is a description for the 940 nm range.",
},
{
range:945,
description:"This is a description for the 945 nm range.",
},
{
range:975,
description:"This is a description for the 975 nm range.",
},
{
range:1064,
description:"This is a description for the 1064 nm range.",
},
{
range:1070,
description:"This is a description for the 1070 nm range.",
}
]
titleOutput.innerHTML = slider.value;
slider.oninput = function(){
for(let i=0; i<wavelengths.length; i++){
if(this.value === wavelengths[i]['range'].toString()){
titleOutput.innerHTML = this.value;
descriptionOutput.innerHTML = wavelengths[i]['description'];
}
}
}
</script>
解决方案
推荐阅读
- php - 如何在具有透明背景的网站上创建可关闭的 div?
- css - TypeError: $.each 不是函数 (ReactJS)
- kubernetes - EKS 集群中的 FailedCreatePodSandBox 事件
- mysql - 高工作负载导致存储过程变慢
- typescript - 实现流畅的泛型类方法 Typescript
- laravel-5 - 在 laravel 5.1.45 中将输入密码与数据库哈希密码匹配
- javascript - 在等待时出错,在使用异步函数时等待仅在异步函数上有效
- http - NodeMCU 无法连接到网站
- css - safari 过渡期间的元素错位
- node.js - ExcelJS - 如何设置第一个工作表处于活动状态