javascript - 是否可以使用 JavaScript 将 SVG 对象坐标设置为可变变量?
问题描述
我正在使用 HTML 和 JavaSCript 创建 svg,我想基于 onclick 函数向其中添加一些新的 svg 对象。我想知道是否可以将新的 SVG 坐标设置为可变变量。我的想法是这样的:
HTML
<!DOCTYPE html>
<html>
<body>
<svg id="board" width="360" height="360">
<rect x="10" y="10" width="100" height="100"/>
<rect x="130" y="10" width="100" height="100"/>
<rect x="250" y="10" width="100" height="100"/>
<rect x="10" y="130" width="100" height="100"/>
<rect x="130" y="130" width="100" height="100"/>
<rect x="250" y="130" width="100" height="100"/>
<rect x="10" y="250" width="100" height="100"/>
<rect x="130" y="250" width="100" height="100"/>
<rect x="250" y="250" width="100" height="100"/>
</svg>
</body>
JS
window.onclick = function(event){
const CX = event.pageX;
const CY = event.pageY;
[...]
drawImage();
}
[...]
function drawImage(){
let coordX = CX/(360/3); //360 is a size of the SVG object
let coordY = CY/(360/3);
function addCircle(){
const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
circle.setAttribute("cx", coordX);
circle.setAttribute("cy", coordY);
circle.setAttribute("r", "45");
circle.setAttribute("stroke", "blue");
circle.setAttribute("stroke-width", "10");
circle.setAttribute("fill", "#FCF8C4");
document.getElementById("board").appendChild(circle);
}
}
我想在特定位置可视化新绘制的基于 onclick 的 SVG。这甚至可以这样做吗?
解决方案
如果您修复脚本中的错误,似乎可以工作,即
- 您需要将 CX 和 CY 传递给 drawImage
- 你需要实际调用 addCircle
- 你可以直接使用CX和CY
window.onclick = function(event){
const CX = event.pageX;
const CY = event.pageY;
drawImage(CX, CY);
}
function drawImage(CX, CY){
let coordX = CX;
let coordY = CY;
function addCircle(){
const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
circle.setAttribute("cx", coordX);
circle.setAttribute("cy", coordY);
circle.setAttribute("r", "45");
circle.setAttribute("stroke", "blue");
circle.setAttribute("stroke-width", "10");
circle.setAttribute("fill", "#FCF8C4");
document.getElementById("board").appendChild(circle);
}
addCircle();
}
<!DOCTYPE html>
<html>
<body>
<svg id="board" width="360" height="360">
<rect x="10" y="10" width="100" height="100"/>
<rect x="130" y="10" width="100" height="100"/>
<rect x="250" y="10" width="100" height="100"/>
<rect x="10" y="130" width="100" height="100"/>
<rect x="130" y="130" width="100" height="100"/>
<rect x="250" y="130" width="100" height="100"/>
<rect x="10" y="250" width="100" height="100"/>
<rect x="130" y="250" width="100" height="100"/>
<rect x="250" y="250" width="100" height="100"/>
</svg>
</body>
推荐阅读
- mysql - MySQL Workbench Visual Explain 不起作用
- ruby-on-rails - 有人可以告诉我如何加载不同的资产文件夹而不是普通资产
- python - 如何检测图表区域并从研究论文的图像中提取(裁剪)它
- android - 如何将 SkiaSharp.SkBitmap 转换为 Android.Graphics.Bitmap?
- java - java.sql.Connection createArrayOf() 返回不支持的功能
- c# - 使用对象的接口将对象列表转换为 IList
- python - 连接两个数据框,其中列值(一组)是另一个数据框的子集
- jquery - Jquery - 文件上传会一遍又一遍地上传相同的文件
- javascript - Nodejs fs.ensureDir 如果有文件,替换为 dir
- react-native - 如何在本机反应中添加固定的后退按钮