Как использовать масштабирование и перетаскивание вместе на контейнере SVG, используя d3 v4? - PullRequest
0 голосов
/ 12 марта 2019

Я могу масштабировать и перетаскивать SVG, но сталкиваюсь с проблемой в координации масштабирования и перетаскивания вместе, т.е. я не могу масштабировать / перетаскивать, если SVG уже масштабируется / перетаскивается.

HTML код:

<svg width="100%" height="480" class="mySvg" id="svgid">

                                                  <rect *ngFor="let floorData of floorPlanData"  
                [attr.x]="floorData.assetDto.assetLocationDto.col*10 +1" 
                [attr.y]="floorData.assetDto.assetLocationDto.row*10 +1" 
                [attr.height]="floorData.assetDto.assetLocationDto.height*10 -2" 
                [attr.width]="floorData.assetDto.assetLocationDto.width*10 -2"  
                [attr.id]="floorData.assetDto.assetId" 
                [attr.fill]="floorData.fill"
                style="stroke-width:0.4;stroke:grey;"></rect>        </svg>

Код TS:

    this.zoom = d3.zoom()
    .scaleExtent([0.5, 10])
      .translateExtent([[250, 250],[250, 250]])
    .on("zoom", function() {
      d3.select(this).attr("transform", function(){return 'scale(' + d3.event.transform.k + ')'})

    });

    this.drag = d3.drag().subject(this.subject) .on("drag", function(d) {
   d3.select(this).attr("transform", "translate(" + (d.x = d3.event.x) + "," + (d.y = d3.event.y) + ")");
});

    this.drag(d3.select('#svgid').datum({x: 0, y: 0}));

    d3.select('#svgid').call(this.zoom);

    d3.select('#svgid').style("transform-origin", "50% 50% 0");

  }
  subject() {var t = d3.select(this);return {x: t.attr("x"), y: t.attr("y")}; };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...