javascript - 尝试使用简单的显示/隐藏滑块来显示单独的 div,无法将其映射到 slider.value 到数组
问题描述
我自己一直在 w3school 学习 javascript,当我遇到根据所选容量在我的工作中显示不同场所的问题时,我有机会尝试我学到的一些技能,所以我决定制作一个滑块,并认为我可以映射滑块。数组变量的值,但我已经尝试过了,但它不起作用。
请指导如何解决这个问题,我真的是 Lvl 1,所以我确信我在某个地方犯了一个非常愚蠢的错误,非常感谢你的时间。
这是代码
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.slidecontainer {
width: 100%;
}
.slider {
-webkit-appearance: none;
width: 100%;
height: 15px;
border-radius: 5px;
background: #d3d3d3;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
}
.slider:hover {
opacity: 1;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 25px;
height: 25px;
border-radius: 50%;
background: #1A77B9;
cursor: pointer;
}
.slider::-moz-range-thumb {
width: 25px;
height: 25px;
border-radius: 50%;
background: #4CAF50;
cursor: pointer;
}
</style>
</head>
<body>
<h1>Round Range Slider</h1>
<div class="slidecontainer">
<input type="range" min="10" max="500" value="20"step ='10' class="slider" id="myRange" onchange ="myfunction()">
<p>Value: <span id="demo"></span></p>
</div>
<div id="myDIV">
This is my DIV element.
</div>
<script>
var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
output.innerHTML = slider.value;
slider.oninput = function() {
output.innerHTML = this.value;
}
var smallCap = [10, 20, 30 , 40, 50];
var Capacity;
function myfunction() {
var x = document.getElementById("myDIV");
if (slider.value === "50" ) {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
</script>
</body>
</html>
解决方案
这会将滑块映射到 smallCap 数组。我不知道在浏览器处理范围后更改范围的方法,因此此解决方案根据 smallCap 中的值在 JavaScript 代码中创建滑块,并假定 smallCap 值按升序排列。
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.slidecontainer {
width: 100%;
}
.slider {
-webkit-appearance: none;
width: 100%;
height: 15px;
border-radius: 5px;
background: #d3d3d3;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
}
.slider:hover {
opacity: 1;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 25px;
height: 25px;
border-radius: 50%;
background: #1A77B9;
cursor: pointer;
}
.slider::-moz-range-thumb {
width: 25px;
height: 25px;
border-radius: 50%;
background: #4CAF50;
cursor: pointer;
}
</style>
</head>
<body>
<h1>Round Range Slider</h1>
<div class="slidecontainer">
<!-- input will go here -->
<p>Value: <span id="demo"></span></p>
</div>
<div class='venue' data-capacity=10>
Venue A has capacity of 10
</div>
<div class='venue' data-capacity=20>
Venue C has capacity of 20
</div>
<div class='venue' data-capacity=30>
Venue Q has capacity of 30
</div>
<script>
var smallCap = [10, 20, 30 , 40, 50];
var Capacity;
var inputTemplate = '<input id="myRange" class="slider" type="range" min={min} max={max} value={value} step=10>'
inputTemplate = inputTemplate.replace("{min}",smallCap[0]).replace("{max}",smallCap[smallCap.length-1]).replace("{value}",smallCap[0]);
$('.slidecontainer').prepend(inputTemplate);
var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
output.innerHTML = slider.value;
slider.oninput = function() {
myfunction(this.value);
}
function myfunction(value) {
output.innerHTML = value;
document.querySelectorAll('.venue').forEach(item => { item.style.display = 'none'; })
var element = document.querySelector('.venue[data-capacity="' + value + '"]');
if (element) {
element.style.display = 'block';
}
}
myfunction(smallCap[0]);
</script>
</body>
</html>
推荐阅读
- swift - NavigationBar 奇怪的额外空白
- shell - 一段时间后Ocaml执行程序未产生新输出
- php - 具有嵌套相关子类别的多态多对多类别
- asp.net-core - Microsoft.AspNetCore.Mvc.Testing 和 Microsoft.AspNetCore.TestHost 包之间的差异
- mysql - MySQL函数,检索和操作日期时间
- json - 嵌套数组上的 Laravel AssertJsonCount
- r - 如何获得数据集中转发的前 10 条推文?
- python - ValueError:ModelForm 没有指定模型类
- excel - 使用spring boot将日期从excel文件插入mysql
- docker - 将日志从某个 Docker 容器输入到 Logstash 的最简单方法是什么?