【发布时间】:2022-02-11 15:35:39
【问题描述】:
我有 5 个复选框代表一个待办事项列表,对于我单击的每个复选框,圆的直径应该完成 1/5、2/5、3/5、4/5、5/ 5 直到完成 5 个复选框,复选框的创建顺序无关紧要。如果我单击“第一个 ToDo”和“第三个 ToDo”而不选择“第二个 ToDo”,则圆圈仍应显示 2/5。
到目前为止,我已经能够使圆圈与复选框的输入进行交互,但是当我单击其中一个待办事项时,我正在努力使视觉进度发生,它被标记但不在正确的顺序和部分,这个想法是视觉进度应该向右移动直到完成圆圈。
在网上找资料,我看到有人用<circle path>但是我真的很困惑,因为有些配置是通过CSS进行的,而其他人是在JS中进行的,据我所知最好用JS来显示进度,因为它应该在复选框的基础上运行。
function update() {
var myBar = document.getElementById("myCircle");
//Reference the Form.
var toDo = document.getElementById("toDo");
//Reference all the CheckBoxes in Table.
boxes = toDo.querySelectorAll("input[type='checkbox']:checked");
checked = boxes.length
myBar.style.strokeDasharray = ((checked) * 100) + "%";
if (checked === 0) {
alert("Please select CheckBox(s).");
}
return true;
}
checks = document.querySelectorAll("input[type='checkbox']");
checks.forEach(function(box) {
box.addEventListener("change", function() {
update()
});
});
#myCircle {
width: 0;
height: 30px;
stroke: #A3BBAD;
stroke-width: 3px;
}
#myProgress {
margin: auto;
width: 50%;
stroke: #357266;
stroke-width: 3px;
}
<svg height="100" width="100">
<circle id="myProgress" cx="50" cy="50" r="40" fill="transparent"/>
<circle id="myCircle" cx="50" cy="50" r="40" fill="transparent"/>
</svg>
<br>
<form id="toDo">
<input id="FirstToDo" type="checkbox" value="1" /><label for="FirstToDo">First</label>
<input id="SecondToDo" type="checkbox" value="2" /><label for="SecondToDo">Second</label>
<input id="ThirdToDo" type="checkbox" value="3" /><label for="ThirdToDo">Third</label>
<input id="FourthToDo" type="checkbox" value="4" /><label for="FourthToDo">Fourth</label>
<input id="FifthToDo" type="checkbox" value="5" /><label for="FifthToDo">Fifth</label>
</form>
<script src="Circle.js"></script>
【问题讨论】:
-
我为您创建了一个Stack Snippet,如果有任何问题,请随时编辑
-
您将 strokeDasharray 从 100% 设置为 500%。
-
我没有完全得到你的建议,你能更具体点吗?据我说,我将其设置为 100%,因此百分比可以代表整个圆圈。但是我对使用 SVG circle 很陌生,所以我不确定我是否使用了正确的方法。
标签: javascript html css svg checkbox