如何安排css转换比例,旋转和翻译React中包含子元素的地图

时间:2016-11-22 12:58:15

标签: css reactjs maps css-transforms

在React中构建地图界面。

有一个包装器div和一个子SVG,它是地图。也是位于地图上某个位置的子标记元素。

地图和包装是1920px×1080px。

<div id="wrapper">
    <svg />
    <Marker />
</div>

我正在尝试解决2个用例。 我可以解决其中一个问题,但两者都证明很难。

案例A :地图需要以标记坐标为中心,从该点进行缩放和旋转并使其保持居中(它是移动目标)。

案例B :用户可以平移缩放并旋转他们在地图上触摸的地图。

案例A和B不会同时启用。

要解决案例A包装器上的这个css工作:

transform: `translate3d(${(960 - x)}px, ${(540 - y)}px, 0) scale(${zoom}) rotate(${rotate}deg)`

其中x和y是您要设置为地图原点的像素坐标,缩放和旋转是缩放和旋转。 960和540是地图宽度和高度的一半。这适用于案例A。

案例B 非常棘手,因为变换原点需要位于用户触摸地图的位置,因此需要从该点开始缩放旋转和缩放。为此,我一直在尝试动态设置transform-origin。

问题是在这两种模式之间以及触摸之间移动,以便地图保持正确的翻译。

我考虑过在父元素上进行翻译,在子元素上进行旋转和缩放。比如下面的伪代码

<div id="wrapper" style={{translation(x,y)}} >
    <svg style={{ rotation(rotate), scale(zoom), transformOrigin(origin) }} />
    <Marker />
</div>

但我认为这会使案例A

变得棘手

0 个答案:

没有答案