javascript - CSS transform-origin 不适用于 safari 中的 svg

标签 javascript html d3.js svg safari

我正在尝试围绕其中心旋转图像。但在 Safari 中,SVG 的左上角始终以原点为中心旋转。

       var rotate_val= 30;
       function rotate(val){
           rotate_val =  rotate_val + val;
           var transform = "translate(0, 0) scale(1, 1) rotate("+rotate_val+ ")";

           var svg = d3.select("g").transition()
            .style('-webkit-transform-origin', '50% 50%')
            .style('transform-origin', 'center')
            .duration(1200)
            .attrTween("transform",function(interpolate) {
                return d3.interpolate(transform, transform);
            });

       }



  <body>
      <button onclick="rotate(30)">Rotate + 30</button>
      <button onclick="rotate(-30)">Rotate - 30</button>
      <div id = "svgcontainer" style="border: 1px solid">
         <svg width = "100%" height = "100%" viewBox="0 0 750 400">
             <g>
                 <image x="325" y="150" xlink:href="image.png" height="100" width="100"/>
            </g>
         </svg>
      </div>
   </body>

https://jsfiddle.net/ztw2omgb/

最佳答案

根据MDN docs for transform-originSVGtransform-origin 的状态是兼容性未知。所以它可能还没有在 Safari 中实现。

但是,如果您完全删除 transform-origin 属性,您可以使用 rotate() 函数的第二个和第三个参数为所选元素定义旋转中心。例如

您的图像的 xy 值分别为 325150,宽度和高度为都是 100。所以旋转中心应该是 xy 值加上宽度和高度的一半 (50) 给出 375200

function rotate(val){
  rotate_val =  rotate_val + val;

  // note the rotate function now contains second and third argument,
  // which specify the center of rotation.
  var transform = "translate(0, 0) scale(1, 1) rotate("+rotate_val+ ", 375, 200)";

  d3.select("g").transition()
    .duration(1200)
    .attrTween("transform",function(interpolate) {
       return d3.interpolate(transform, transform);
    });

}

关于javascript - CSS transform-origin 不适用于 safari 中的 svg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57732067/

相关文章:

javascript - 如何在动态生成的 input-angularjs 中显示动态 Json 数据?

javascript - 如何使用 angularjs 呈现需要不同模板(具有不同变量)的混合 json 结果

javascript - 事件中的方法

javascript - 在 d3.js 中从一个圆圈画一条线到另一个圆圈

d3.js - 如何在呈现图表后为 dc.js 图表应用工具提示

javascript - 如何将 d3.xml 加载的 svg 附加到 svg 中

javascript - node.js 需要文件夹中的所有文件

javascript - 我可以在Android应用程序中使用javascript吗?

javascript - 通过调用javascript函数在html中设置参数值

html - 如何使列表出现在悬停时?