假设我想创建一个小的正方形web元素,中间有一个圆圈和一个复选框。勾选复选框会改变圆圈的颜色。我提供了一个工作代码示例如下。我目前面临的问题是,我目前的实现将复选框放置在svg之下,而不是之内。
因此我的问题:有没有办法把这个tickbox放在svg元素里面或者上面,并且用宽度和高度的百分比来指定它的位置?(例如,x =宽度/2,y =高度/2)
我希望这将是一个简单的问题,但我似乎找不到解决方案-也许我搜索了错误的关键字。我将感谢任何建议!
<!DOCTYPE html>
<html>
<head>
<script src="https://unpkg.com/mathjs/lib/browser/math.js"></script>
<script src="https://d3js.org/d3.v4.min.js"></script>
</head>
<!-- Create a div where the graph will take place -->
<div id="my_dataviz">
<svg id="click" xmlns="http://www.w3.org/2000/svg" style="background-color:#cccccc">
<defs>
</defs>
</svg>
</div>
<input type="checkbox" onclick='check()' id='myCheckbox'>
<body>
<script>
// ===================================================
// Set up basic viewport options
// ===================================================
// Get viewport sizes
const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0)
const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)
// Fit in a square window
var height = math.min([vw,vh])*0.75;
var width = math.min([vw,vh])*0.75;
// Create a svg
var svg = d3.select("#click") // This selects the div
.attr("width", width) // This defines the canvas' width
.attr("height", height) // This defines the canvas' height
// Plot a circle
svg.append("circle")
.attr("r", height/4)
.attr("cx", width/2)
.attr("cy", height/2)
.attr("fill", "#ff0000")
.attr("opacity", 0.75)
.attr("id","circ");
// Checking the box changes the color
function check() {
// If the box is ticked, make the circle green
if (d3.select("#myCheckbox").property("checked")) {
d3.select("#circ")
.attr("fill", "#00ff00")
// If the box is not ticked, make the circle red
} else {
d3.select("#circ")
.attr("fill", "#ff0000")
}
}
</script>
</body>
</html>
编辑:按照HereticMonkey的建议,你建议如下编辑html部分吗?
<!-- Create a div where the graph will take place -->
<div id="my_dataviz" position="relative">
<svg id="click" xmlns="http://www.w3.org/2000/svg" style="background-color:#cccccc" position="absolute">
<defs>
</defs>
</svg>
<input type="checkbox" onclick='check()' id='myCheckbox' top="0px" left="-100px" position="absolute">
</div>
2条答案
按热度按时间4xrmg8kj1#
foreignObject
中使用
x
和y
属性微调定位:has
选择器根据:checked
状态为circle
着色FireFox尚不支持:https://caniuse.com/css-has
因此,添加您自己的JS
onclick
* inlineventhandler * 来为圆圈着色配备
:has
选择器的现代版本经典FireFox版本
CHECKED
设置来设置初始:已检查状态x759pob22#
多亏了Heretic Monkey令人敬畏的建议,我已经让它工作起来了!