【问题标题】:Disable zoom on selected elements only仅对选定元素禁用缩放
【发布时间】:2016-04-12 13:54:33
【问题描述】:

我有一个简单的 SVG,它可以缩放和平移。

我想要做的是只禁止缩放某些元素,但保持平移,元素必须保持相对于彼此的位置。

所以在下面的示例中,红色圆圈可以平移和缩放,但蓝色圆圈只能平移 - 例如地图标记,红色圆圈是地球

这是我试过但没有效果:

zoom = d3.behavior.zoom()
        .translate([0, 0])
        .scale(1)
        .scaleExtent([1.3, 10])
        .on("zoom", zoomed);

function zoomed() {
  map.attr("transform", "translate(" + d3.event.translate + ")" + 
    " scale(" + d3.event.scale + ")")
}

svgWidth = 1890;
svgHeight = 932;

map = d3.select("body")
        .append("svg")
        .attr({
            "width": svgWidth,
            "height": svgHeight,
            "id": "svg"
        })
        .call(zoom)
        .append("g");

var circle = map.append("circle")
  .attr("cx", 100)
  .attr("cy", 100)
  .attr("r", 20)
  .attr("fill", "red");

var circle2 = map.append("circle")
  .attr("cx", 140)
  .attr("cy", 140)
  .attr("r", 20)
  .attr("fill", "blue")
  .on('mousedown.zoom', null); // <-- no zoom on this element

D3 可以做到这一点吗?

Here's a fiddle showing the full SVG example

更新

我刚刚注意到谷歌地图有一个类似的东西——如果你确定一个地方(或几个地方),一个或多个标记会出现,无论缩放如何,它都会保持(几乎)相同的大小,但会随着地图平移。这就是我想要实现的目标。

I have seen this question,我的问题不是重复的,因为它也会停止平移,这是我不想要的

【问题讨论】:

  • 查找语义缩放:bl.ocks.org/mbostock/3680957
  • D3 selective Zoom的可能重复
  • 您能否更详细地解释您想要什么。即使在缩放时,您是否希望圆圈始终保持相同的大小?所以基本上缩放根本不会影响圆圈?或者您是否希望在蓝色圆圈上方时无法缩放?
  • @thisOneGuy 你的第一个陈述是正确的 - 蓝色圆圈始终保持相同的大小,但仍然与整个 svg 一起平移 - 红色圆圈平移和缩放
  • 我不确定您一般想要什么,但在这种情况下,您只需将蓝色圆圈的半径保持在正确的大小即可获得所需的效果:jsfiddle.net/xce0momh/1。我认为涵盖所有案例的解决方案可能有点临时性。

标签: d3.js


【解决方案1】:

您需要在 UI 放大时取消缩放对目标对象的影响:

function zoomed() {
  map.attr("transform", "translate(" + d3.event.translate + ")" + 
    " scale(" + d3.event.scale + ")");
  d3.selectAll(".exclude-from-zoom").attr("transform", "scale(" + d3.event.scale + ")");
}

/* ... */

var circle2 = map.append("circle")
  .attr("class", "exclude-from-zoom")
  .attr( ... /* do the rest, excluding the on() event call */

【讨论】:

  • 这不能正常工作 - 看看这个小提琴以获得更好的例子jsfiddle.net/studiotime/xce0momh/8 - 蓝色圆圈应该保持相同的大小/位置,而红色缩放
猜你喜欢
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2021-02-19
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多