D3变换比例并保持位置不变
D3 transform the scale and keep the position unchanged
我试图在d3中拖动一组元素,但当鼠标放在操作符上时,我也需要缩放组。
当我缩放组时,它会改变它的位置,当它在svg中的位置不变时,是否可以缩放它?
这是我工作的小提琴。
<svg width="400" height="400" style="background-color: red">
<g id="op" class="operator">
<circle cx="50" cy="50" r="20" style="fill: yellow"></circle>
</g>
</svg>
script.js
d3.selectAll('.operator')
.on('mouseenter', function () {
console.log('Mouse Enter');
d3.select(this).attr('transform', 'scale(2)');
})
.on('mouseleave', function () {
console.log('Mouse Leave');
})
.call(d3.behavior.drag()
.on('drag', function () {
d3.select(this).attr('transform', 'translate(' + d3.event.x + ',' + d3.event.y + ')');
})
)
当您进行2的缩放时。
如果cx是50,cy是50,那么在刻度2上,圆圈将出现在中心cx*scale=100和cy*scale=100处。
这就是它在规模上跳跃的原因。现在,如果你想让圆圈在同一个地方,你需要做这样的事情:
d3.select(this).select("circle").attr("cx", 50/scale)
d3.select(this).select("circle").attr("cy", 50/scale)
按比例划分这将中和圆心的比例效果。
因此,缩放后,新的cx和cy将为25。
此处为工作代码。
相关文章:
- jquery试图按名称获取按钮位置
- 我可以获得相对于被点击元素的确切点击位置吗
- 谷歌地图固定位置覆盖
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 循环比赛位置算法
- es6 相当于下划线查找位置
- jQuery循环在特定位置暂停
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 自定义函数中的光标位置
- 安卓平台上的QWebView HTML5地理位置
- DIV并排,位置不正确
- 在变换的绝对位置发生变化时制作动画's参数
- D3变换比例并保持位置不变
- 在画布中变换,使精灵在移动时保持在正确的位置
- CSS3变换使用鼠标位置旋转
- 定位鼠标相对于变换平面的位置
- CSS3变换使用鼠标位置旋转-第二阶段
- CSS变换破坏鼠标位置事件
- 变换(缩放)与简单的宽度/高度和左/顶部位置
- CSS通过位置或变换来移动元素