1

找到了一个潜在的解决方案,但它似乎没有用。

$('svg')
  .on("mousewheel.zoom", null)
  .on("DOMMouseScroll.zoom", null) // disables older versions of Firefox
  .on("wheel.zoom", null);

问题是地图正在点击事件重绘。在某些情况下,缩放事件没有被初始化,但滚动仍然在 SVG 元素上被捕获。当滚动被“捕获”时,它会阻止页面滚动(这不是所需的行为)。有没有办法以编程方式禁用滚动事件的捕获以放大 SVG?

D3 似乎是动态绑定的,我什至尝试过将绑定显式中断到极端:

$('.map-container, #map, g, svg, d3, div').off('scroll').unbind('scroll').undelegate('scroll');
$(window).off('scroll').unbind('scroll').undelegate('scroll');
$(document).off('scroll').unbind('scroll').undelegate('scroll');

这可能是我对绑定等基本知识的失败,或者 D3 可能是以一种非常有弹性的方式构建的。

有任何想法吗?(如果有任何答案,请解释一下,这对我来说很好奇!)

4

2 回答 2

3

解决方案

这是获得正确优先级并使用本机功能的问题。

这在通过按钮单击等调用时有效。

 $('.myClass').on('click',function() {
   d3.select('#map')
     .on("mousewheel.zoom", null)
     .on("DOMMouseScroll.zoom", null)
     .on("wheel.zoom", null);
 });

我希望这对其他人有帮助!

于 2013-09-27T16:00:41.140 回答
0

我最好的猜测是:

$('svg').on('mousewheel DOMMouseScroll', function(e) {
    e.preventDefault();
});
于 2013-09-27T14:53:16.847 回答