2013-09-27 69 views
1

找到了一個潛在的解決方案,但它似乎沒有工作。在地圖上禁用滾動事件

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

的問題是在click事件被重新繪製地圖。在某些情況下,縮放事件未被初始化,但仍然通過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是建立在一個非常有彈性的方式。

任何想法? (!如果任何答案,請他們解釋,這是好奇的我)

+1

您不能在不修改源代碼的情況下顯式禁用它,但在事件處理程序中,您可以檢查事件的來源並忽略它是否來自滾動。 –

回答

3

SOLUTION

這是獲得優先權正確的,並且使用的問題本地功能。

這工作致電時通過點擊鏈接等

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

我希望這可以幫助別人!

0

我最好的猜測是:

$('svg').on('mousewheel DOMMouseScroll', function(e) { 
    e.preventDefault(); 
}); 
+0

可悲的是沒有去...謝謝你給我看什麼在臉上凝視着我雖然,組合 – roberthuttinger

+0

這並沒有提供一個問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – RedEyedMonster

+0

@RedEyedMonster對於所有問題,並不總是100%準確的答案。事實上,在大多數情況下,這**會起作用。你評論所有最終會出現謬誤的答案嗎? –