【发布时间】:2017-09-05 16:58:36
【问题描述】:
我有一个 svg 元素,我正在向它添加一个简单的旋转属性。 问题是,我希望元素相对于自身中心旋转,而不是整个 svg,所以我指定 x 和 y 进行旋转,但它有一个奇怪的弹性效果。
let currentAngle = 0;
function rotate() {
d3.select('.group1')
.transition()
.attr('transform', function() {
let bb = this.getBBox();
let rx = bb.x + bb.width / 2;
let ry = bb.y + bb.height / 2;
currentAngle += 90;
return `rotate(${currentAngle}, ${rx}, ${ry})`;
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<svg viewbox="0 0 1600 1600" width="500" height="500">
<g class="group1" onclick="rotate()">
<rect x="250" y="250" width="100" height="100" />
<circle cx="420" cy="300" r="50" />
</g>
</svg>
作为替代方案,我尝试在 css 上添加 transform-origin,类似于 transform-origin: 800px 800px;(但当然具有有效的中心 px),虽然它在 Chrome 中有效,但在 IE 和 Safari 中无效。
为什么在旋转时提供 x 和 y 会使我的元素反弹?
【问题讨论】:
-
这是一个不使用 d3 的示例,它可以工作 jsfiddle.net/LukaszWiktor/haye1xj2
-
我最终使用
gsap来代替,因为它使用了似乎在 IE 8 中有效的矩阵转换。
标签: javascript d3.js