Javascript 如何在D3.js中禁用缩放功能?

Javascript 如何在D3.js中禁用缩放功能?,javascript,d3.js,scroll,zooming,Javascript,D3.js,Scroll,Zooming,我有一个D3的缩放功能,但我想让它成为可选的,所以我想一个方法来关闭它。这是我的密码: //Zoom command ... var zoom = d3.behavior.zoom() .x(xScale) .y(yScale) .scaleExtent([1,10]) .on("zoom", zoomTargets); var SVGbody = SVG.append("g") .attr("clip-path", "url(#clip)")

我有一个D3的缩放功能,但我想让它成为可选的,所以我想一个方法来关闭它。这是我的密码:

//Zoom command ...
var zoom = d3.behavior.zoom()
    .x(xScale)
    .y(yScale)
    .scaleExtent([1,10])
    .on("zoom", zoomTargets);

var SVGbody = SVG.append("g")
    .attr("clip-path", "url(#clip)")
    .call(zoom);
/

如您所见,我尝试使用if语句来阻止未勾选复选框时缩放功能工作。这可以防止用户在鼠标位于SVG框架内时在页面上滚动


我想用正确的方法来做这件事。非常感谢

这是一种禁用d3缩放行为的方法

SVGbody.select("g").call(d3.behavior.zoom().on("zoom", null));

这是一种禁用d3缩放行为的方法

SVGbody.select("g").call(d3.behavior.zoom().on("zoom", null));

这是一种禁用d3缩放行为的方法

SVGbody.select("g").call(d3.behavior.zoom().on("zoom", null));

这是一种禁用d3缩放行为的方法

SVGbody.select("g").call(d3.behavior.zoom().on("zoom", null));


如果要拖动但不进行缩放,请忽略
zoom.scale()
。我希望禁用所有功能。我的网站有一些内容,因此您可以滚动整个页面(而不仅仅是SVG)。当我用if语句“关闭”缩放时,由于某种原因,当鼠标位于SVG区域时,我无法再在页面上滚动。我希望当它被禁用时,能够像在任何常规页面上一样滚动。听起来好像缩放行为发生了什么。你可以发布一个完整的例子吗?是的,我这里有一个类似的代码:首先,当复选框没有勾选时,你不能缩放。你也不能向下滚动页面本身,这正是我想要做的。勾选该复选框后,可以按预期进行缩放。在我看来,如果zoom.Behavior设置为任意值,它会从浏览器中窃取鼠标控制,因此我无法滚动页面本身。在您的示例中,我可以滚动页面。如果您希望拖动但不缩放,请忽略
zoom.scale()
。我希望禁用所有功能。我的网站有一些内容,因此您可以滚动整个页面(而不仅仅是SVG)。当我用if语句“关闭”缩放时,由于某种原因,当鼠标位于SVG区域时,我无法再在页面上滚动。我希望当它被禁用时,能够像在任何常规页面上一样滚动。听起来好像缩放行为发生了什么。你可以发布一个完整的例子吗?是的,我这里有一个类似的代码:首先,当复选框没有勾选时,你不能缩放。你也不能向下滚动页面本身,这正是我想要做的。勾选该复选框后,可以按预期进行缩放。在我看来,如果zoom.Behavior设置为任意值,它会从浏览器中窃取鼠标控制,因此我无法滚动页面本身。在您的示例中,我可以滚动页面。如果您希望拖动但不缩放,请忽略
zoom.scale()
。我希望禁用所有功能。我的网站有一些内容,因此您可以滚动整个页面(而不仅仅是SVG)。当我用if语句“关闭”缩放时,由于某种原因,当鼠标位于SVG区域时,我无法再在页面上滚动。我希望当它被禁用时,能够像在任何常规页面上一样滚动。听起来好像缩放行为发生了什么。你可以发布一个完整的例子吗?是的,我这里有一个类似的代码:首先,当复选框没有勾选时,你不能缩放。你也不能向下滚动页面本身,这正是我想要做的。勾选该复选框后,可以按预期进行缩放。在我看来,如果zoom.Behavior设置为任意值,它会从浏览器中窃取鼠标控制,因此我无法滚动页面本身。在您的示例中,我可以滚动页面。如果您希望拖动但不缩放,请忽略
zoom.scale()
。我希望禁用所有功能。我的网站有一些内容,因此您可以滚动整个页面(而不仅仅是SVG)。当我用if语句“关闭”缩放时,由于某种原因,当鼠标位于SVG区域时,我无法再在页面上滚动。我希望当它被禁用时,能够像在任何常规页面上一样滚动。听起来好像缩放行为发生了什么。你可以发布一个完整的例子吗?是的,我这里有一个类似的代码:首先,当复选框没有勾选时,你不能缩放。你也不能向下滚动页面本身,这正是我想要做的。勾选该复选框后,可以按预期进行缩放。在我看来,如果zoom.Behavior设置为任何值,它会从浏览器中窃取鼠标控制,因此我无法滚动页面本身。在您的示例中,我可以滚动页面。感谢您的回复。但是它对我不起作用,我想这是因为我有几个地方可以使用
append(“g”)
。如果生成的html是这样的,我如何实现它?我尝试过使用puting
.attr(“class”,“zoomClass”)
并使用
selectAll(“zoomClass”)
而不是
select(“g”)
,但它仍然没有任何不同,缩放之后仍然有效。SVGbody.select(“g”)返回第一个子代g元素。可能是具有缩放的元素可能不是第一个子元素。如果g有一个类,则使用select方法绑定调用。你能做一个JSFIDLE吗?我这里有一个。它有几个G元素,我对其中一个使用
call(zoom)
。在我的完整代码中,我在两个上使用了它,但我假设使用class属性将同时获取它们。这是我想在原始代码中选择的第二个也是最后一个。所以,这意味着答案是正确的,不是吗?(因为选择“g”不是答案的重要部分…)感谢您的回复。但是它对我不起作用,我想这是因为我有几个地方可以使用
append(“g”)
。如果生成的html是这样的,我如何实现它?我尝试过使用puting
.attr(“class”,“zoomClass”)
并使用
selectAll(“zoomClass”)
而不是
select(“g”)
,但它仍然没有任何不同,缩放之后仍然有效。SVGbody.select(“g”)返回第一个子代g元素。可能是具有