这是我的第一个SVG项目,我不是程序员,但我涉足交互式信息图表。我以前在这方面的经验来自于使用ActionScript。SVG缩放和坐标
我正在使用普通的SVG(不拉斐尔,D3等),并试图创建一个交互式条形图。经过与SVG一些最初的困难坐标系和缩放,我发现了一些代码网上,处理后缩放翻译:
<text x="x_coord0" y="y_coord0" transform="scale(x_scale, y_scale) translate(-x_coord0*(x_scale-1)/x_scale, -y_coord0*(y_scale-1)/y_scale)" …>text</text>
我将它改成这个JavaScript:
var translationfactor = ((0 - y_position)*(y_scalefactor - 1)/y_scalefactor);
var matrix = "scale(1," + y_scalefactor + ") translate(0," + Number(translationfactor) + ")";
targetbar.setAttribute("transform", matrix);
的问题是,我需要将“翻译”的小节转回到图表的基线,而不是其最高点的原始位置。目前,正确缩放条拥抱图表的顶部:
http://billgregg.net/miscellany/upsidedown-barchart.png
我已经试过了一些修复,包括堵漏棒‘失踪高度’到translationfactor(酒吧开出的全高度图表并动态缩小)。没有任何工作。我的部分问题是,除了SVG新手之外,我可以整天盯着代码,而我的大脑仍然无法解析它。将负数相乘太抽象了,在基本层面上,我不会“弄”数学,这当然会使修改代码变得困难。
我的问题:
(1)什么是上面的代码到酒吧后面放置在图表的基线的修正?
(2)是否有更透明,更行人的方式来完成翻译?我首先想到的是,如果条的高度降低到其原始值的40%,那么将原始Y坐标值乘以250%应该将条重新设置到其原始位置(至少是其最高点),但是似乎没有工作。
(3)有没有办法将酒吧的原点设置在底部?在Flash中这是可能的,但据我所知,这是一个手册,而不是一个程序化的任务。
(4)在ActionScript中是否有类似于.localToGlobal()的方法可以让我避免混淆局部坐标系?
感谢BigBadaboom花时间撰写了如此全面的答案。 对不起,如果我不清楚,但这是一个交互式的SVG。我现在已经上传了一个副本,我应该首先完成一件事情: http://www.50laboratories.com/miscellany/demographicclout14.svg 条形图主要工作,除了后面提到的扩展条位置问题以上(从图表顶端悬挂的条柱)以及我还没有添加的几行代码,这些代码将在国家被纳入工会之前的多年时间内将条形图清零。 –
我的假设到目前为止,XML格式的SVG代码只能在SVG加载时触发一次,任何用户启动的代码都必须以JavaScript函数的形式出现。我错了吗?除了transform命令之外,我不确定如何将上面的代码翻译成JavaScript。 –
如果你使用的是Firefox,你会注意到另一个问题(最初我不打算在这篇文章中询问它)是因为酒吧的定位不稳定。虽然图表在加载时正确绘制,但当您单击状态并重新绘制状态时,条形会向上和向外漂移。据我所知,这个错误在Chrome中不会发生。我还没有在其他浏览器中测试过它。 –