svg viewbox question/bug 在 svg.js 中实现
svg viewbox question/bug implemented in svg.js
我正在使用 html 和库 svg.js 将 svg 图形写入屏幕。当我应用视图框时,出现一种我无法理解且无法解决的奇怪行为。工作代码和非工作代码的区别如下:
工作代码:
//Works great
svg = SVG(document.getElementsByTagName("div")[0]);
draw = svg //.viewbox(0, 0, 300, 300)
破产:
//XY coordinates are off weird amounts
svag = SVG(document.getElementsByTagName("div")[0]);
draw = svg.viewbox(0, 0, 300, 300) //adding view box causes the problem
实施:
function drawRect(e) {
var rectX = e.clientX;
var rectY = e.clientY;
draw.rect(10,10).move(rectX, rectY).fill("#00FF00")
broken/working:
请原谅我的笨拙.. 绿色方块关闭,离点 (0,0) 越远,关闭的越多。 "off" 我的意思是绿色方块不会出现在点击发生的地方。由于某些因素。
我想知道如何调整我的视图框代码:
可能相关:SVG viewBox Coordinates
通过 SVG 通过 where (SVG.handlerMap[0] === <svg
dom 节点对象) 判断点似乎可以解决问题
var p = SVG.handlerMap[0].createSVGPoint();
p.x = rectX;
p.y = rectY;
var pN = p.matrixTransform(SVG.handlerMap[0].getScreenCTM().inverse());
rectX = pN.x;
rectY = pN.y;
你得把鼠标坐标转换成svg的坐标系。您可以使用 point()
方法来做到这一点:
p = draw.point(e.clientX, e.clientY)
draw.rect(10,10).center(p.x, p.y).fill("#00FF00")
我正在使用 html 和库 svg.js 将 svg 图形写入屏幕。当我应用视图框时,出现一种我无法理解且无法解决的奇怪行为。工作代码和非工作代码的区别如下:
工作代码:
//Works great
svg = SVG(document.getElementsByTagName("div")[0]);
draw = svg //.viewbox(0, 0, 300, 300)
破产:
//XY coordinates are off weird amounts
svag = SVG(document.getElementsByTagName("div")[0]);
draw = svg.viewbox(0, 0, 300, 300) //adding view box causes the problem
实施:
function drawRect(e) {
var rectX = e.clientX;
var rectY = e.clientY;
draw.rect(10,10).move(rectX, rectY).fill("#00FF00")
broken/working:
请原谅我的笨拙.. 绿色方块关闭,离点 (0,0) 越远,关闭的越多。 "off" 我的意思是绿色方块不会出现在点击发生的地方。由于某些因素。
我想知道如何调整我的视图框代码:
可能相关:SVG viewBox Coordinates
通过 SVG 通过 where (SVG.handlerMap[0] === <svg
dom 节点对象) 判断点似乎可以解决问题
var p = SVG.handlerMap[0].createSVGPoint();
p.x = rectX;
p.y = rectY;
var pN = p.matrixTransform(SVG.handlerMap[0].getScreenCTM().inverse());
rectX = pN.x;
rectY = pN.y;
你得把鼠标坐标转换成svg的坐标系。您可以使用 point()
方法来做到这一点:
p = draw.point(e.clientX, e.clientY)
draw.rect(10,10).center(p.x, p.y).fill("#00FF00")