【问题标题】:Scale a HTML SVG path element and translate the left-top point to the original left-top point using css in jquery缩放 HTML SVG 路径元素并使用 jquery 中的 css 将左上点转换为原始左上点
【发布时间】:2016-03-12 19:26:53
【问题描述】:

我在 svg 路径数据中创建了两个多边形。我想按比例缩小上一层,例如速率为 0.4。然后将缩放的一个平移到具有相同左上点的原始位置。这是要显示的图片。 This is what I want to achieve. This is what I did right now.

现在我只能使用 jQuery 获得第二个图片级别。任何人都可以帮助我吗?非常感谢!!

$(document).ready(function () {
	var offsetLeftO = $("#undeveloped:first").offset().left;
	var offsetTopO = $("#undeveloped:first").offset().top;

	$("#developed").css({'transform':'scale(0.4)'});
	var offsetLeft = $("#developed:first").offset().left;
    var offsetTop = $("#developed:first").offset().top;
        
    var offsetX =  offsetLeftO - offsetLeft;
    var offsetY =  offsetTopO - offsetTop;
    
	$("#developed").css({'transform': 'translate('+offsetX+'px, '+offsetY+'px)'+'scale(0.4)'});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="170mm"
   height="170mm"
   viewBox="0 0 602.36221 602.36215">
    <path
     style="fill:#00b400;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93257946px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
     d="m 307.99025,332.70033 215.2088,-39.40415 -5.50808,198.59689 -190.81585,-1.18212 z"
     id="undeveloped"
     inkscape:connector-curvature="0" />
  <path
  style="fill:#ff5a00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.93257946px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
     d="m 307.99025,332.70033 215.2088,-39.40415 -5.50808,198.59689 -190.81585,-1.18212 z"
     id="developed"
  />
  
</svg>

【问题讨论】:

  • 大家好,我的目标是自动实现匹配,无论速率如何。这意味着无论何时何地我输入速率,正确的 svg 都会出现......并且速率范围是 0

标签: jquery css html svg transform


【解决方案1】:

我创建了一个小提琴。因此,偏移量的值等于每个多边形。

您必须“手动”计算偏移量才能获得良好的位置。由于左上角已从正方形移动,您不能仅使用“0.4”的倒数进行除法,但您必须找到合适的值。

这是我能做的最好的,但其他人肯定可以改善这个答案。

希望它会有所帮助。

这里是 jQuery:

$(document).ready(function () {

    $("#developed").css({'transform':'scale(0.4)'});
    var offsetLeft = $("#developed:first").offset().left;
    var offsetTop = $("#developed:first").offset().top;


    var offsetX = offsetLeft /1.81;
    var offsetY = offsetTop /1.6;

    $("#developed").css({'transform': 'translate('+offsetX+'px, '+offsetY+'px)'+'scale(0.4)'});
});

还有小提琴:https://jsfiddle.net/f92yx76c/1/

【讨论】:

  • 感谢您的帮助,但我希望在我输入费率后自动显示 svg..
  • @ValerieRen 你的意思是你想要一个文本输入,你可以在其中输入费率,并且你想要动态生成图像?但在最初的问题上,您似乎想避免使用 jQuery?
猜你喜欢
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2019-10-08
  • 1970-01-01
相关资源
最近更新 更多