D3.js关于SVG(2)


SVG转化

SVG引入了一个新属性,transform为支持转换。可能的值是以下一项或多项。

  • Translate - 它有两个选项, tx沿x轴平移, ty沿y轴平移。
  • Rotate - 它有三个选项, angle指旋转角度, cx和cy指的是x和y轴旋转的中心。 如果未指定cx和cy ,则默认为坐标系的当前原点。
  • Scale - 它有两个选项, sx沿x轴的比例因子, sy沿y轴的比例因子。 这里, sy是可选的,如果没有指定,则它取sx的值。元素的长宽属性值与sx和sy的值相乘。
  • Skew (SkewX and SkewY) - 只需一个选项; skew-angle指的是SkewX沿x轴的角度和SkewY沿y轴的角度。这个属性可以拆分为skewX和skewY。注意的是,X和Y需要大写

示例一(translate):

<html>
   <head>
      <script src = "https://d3js.org/d3.v6.js"></script>
   </head>
   <body>
      <svg width = "210" height = "210">
         <rect x="10" y="10" width="20" height="20" fill="red" transform="translate(100,100)"></rect>
      </svg>
   </body>
</html>

代码实际效果如下:
<svg width = "210" height = "150"><rect x="0" y="0" width="20" height="20" fill="red" transform="translate(100,100)"></rect></svg>

可以明显看出,矩形的位置在(100,100)这个地方。

示例二(rotate):

<html>
   <head>
      <script src = "https://d3js.org/d3.v6.js"></script>
   </head>
   <body>
      <svg width = "210" height = "110">
         <rect x="20" y="20" width="20" height="20" fill="red" transform="rotate(50 20 20)"></rect>
      </svg>
   </body>
</html>

代码实际效果如下:
<svg width = "210" height = "110"><rect x="20" y="20" width="20" height="20" fill="red" transform="rotate(50 20 20)"></rect></svg>

可以明显看出,矩形在(20,20)位置,围绕(20,20)这个点旋转了50度。

示例三(scale):

<html>
   <head>
      <script src = "https://d3js.org/d3.v6.js"></script>
   </head>
   <body>
      <svg width = "210" height = "80">
         <rect x="0" y="0" width="20" height="20" fill="red" transform="scale(11,1.2)"></rect>
      </svg>
   </body>
</html>

代码实际效果如下:
<svg width = "210" height = "80"><rect x="0" y="0" width="20" height="20" fill="red" transform="scale(11,1.2)"></rect></svg>

原本长宽都为20的矩形,设置scale后,width实际值变为了1120=220,height实际值变为了201.2=24。

示例四(skew):

<html>
   <head>
      <script src = "https://d3js.org/d3.v6.js"></script>
   </head>
   <body>
      <svg width = "210" height = "210">
         <rect x="0" y="0" width="40" height="40" fill="red" transform="skewX(20)"></rect>
      </svg>
   </body>
</html>

代码实际效果如下:
<svg width = "210" height = "210"><rect x="0" y="0" width="40" height="40" fill="red" transform="skewX(20)"></rect></svg>

可以看出,图形变成了平行四边形。

使用d3.js进行svg转换

步骤如下:
(1)创建一个容器来保存SVG图像。
(2)创建svg图像。
(3)用attr方法为图像添加transfrom属性。
(4)为transfrom属性设置相应的转换效果。
示例:

<html>
   <head>
      <script src = "https://d3js.org/d3.v6.js"></script>
   </head>
   <body>
    <div id="one">
    </div>
    <script>
    var width = 210;
    var height = 210;
     var o = d3.select("#one");
     var s = o.append("svg").attr("width",width).attr("height",height);
     var c = s.append("circle");
     c.attr("r",10)
       .attr("fill","red")
       .attr("transform","translate(100,100) scale(5) skewX(10)") ;
    </script>
   </body>
</html>

示例中,在div容器中添加了一个圆形svg图像,并对圆形进行了移动,比例和沿角度拉扯的效果。

声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - D3.js关于SVG(2)


欢迎来到我的小屋