仅当按下 Ctrl 键并滚动时才缩放
2018-01-19
1827
我一直在弄乱 D3JS 源代码。我想要实现的是,如果同时按下 CTRL,则仅允许使用滚动进行缩放(就像 Google 地图一样)。我一直在弄乱完整的 D3: https://d3js.org/d3.v4.js
我试图在第 16556 行左右实现这一点:
function wheeled() {
if (!filter.apply(this, arguments)) return;
if (event.ctrlKey == false) return; //This is the new line I added
.....
//else if ((t.k === k)) return; //I commented out this line
其他一切都完好无损。我下载了这个,并且一直在使用这个示例: https://bl.ocks.org/mbostock/34f08d5e11952a80609169b7917d4172
在 Chrome 中,它运行完美。一切都按预期运行,但是当我尝试在 Firefox 中按 Ctrl+Scroll 时,它只会缩放整个页面。Firefox 说:
ReferenceError: event is not defined[Learn More] d3.v4.js:16558:1
wheeled http://127.0.0.1:8887/d3.v4.js:16558:1
contextListener/<
3个回答
我偶然发现了同样的问题,但不想更改D3源文件。然后,我仅通过有条件地调用原始轮处理程序(我正在使用D3V4)来解决它:
971896176
Gnietschow
2018-12-07
正如我在 我的评论 中所解释的那样,您无需弄乱源代码,只需将条件添加到您的代码中即可。在 您的回复 中,您说它在 Firefox 上不起作用。
好吧,这是 Firefox 的预期行为(请参阅 我的回答 )。
因此,而不是:
if (event.ctrlKey == false) return;
您应该这样做:
if (d3.event.sourceEvent.ctrlKey == false) return;
这将适用于 Chrome 和 Firefox。
这是包含该更改的块: http://blockbuilder.org/anonymous/2a1c5fe3ed6948665f8d946a753adaef
Gerardo Furtado
2018-01-19
使用过滤器要求 ctrlKey 启动缩放事件。按下 ctrlKey 时禁用滚动,以防止滚动超过缩放范围时浏览器的默认操作。这两件事都在缩放文档中有所提示。
// ignore right button and require ctrl
zoom.filter(() => !d3.event.button && d3.event.ctrlKey)
// ignore default browser action when ctrlKey is pressed
selection
.call(zoom)
.on("wheel", () => { if (d3.event.ctrlKey) d3.event.preventDefault() })
nitely
2018-12-23