2012-06-11 29 views
22

在我的谷歌地圖應用程序中,我有一個遵循移動標記的跟隨方法。當它跟隨時,我想允許縮放所有常用方法(dblclick,dblleftclick,mousewheel和touch事件),並且我想禁用任何類型的平移。問題是,在使用鼠標滾輪和dblclick進行縮放時,地圖會被移動到鼠標位置。我可以禁用一切正常,但我想允許縮放。我已經通過使用jquery mousewheel插件並使用delta來更改縮放來解決mousewheel問題。谷歌地圖禁止所有事件的用戶平移

有沒有一些簡單的方法來做到這一點,或者我必須爲所有不同的觸摸和鼠標事件編寫監聽器?

編輯

我已經禁用雙擊,鼠標滾輪縮放和拖動,但我希望有雙擊的功能仍然存在。我也希望觸摸事件發生在那裏,但我希望讓他們從中心縮放而不是事件發生的位置。真正的問題是複製其谷歌已經處理,但改變功能有點

var options = { 
    disableDoubleClickZoom: true, 
    draggable: false, 
    scrollwheel: false, 
    panControl: false 
}; 

this.map = new google.maps.Map(document.getElementById('map'), options); 

我的理想的解決辦法是,如果有一個disableDoubleClickPandisableScrollwheelPandraggable選項實際防止任何形式的所有拖動事件

編輯

這適用於所有設備,臺式機和移動設備。

+1

爲什麼不通過對地圖使用disableDoubleClickZoom選項來禁用「正常」縮放,然後爲使用現有地圖中心放大的地圖的'dblclick'事件設置事件偵聽器(通過使用'中心地產)。 _should_禁用平移。 – andresf

+0

這並不能解決我的問題,只需雙擊鼠標就可以重寫事件。我真正的問題是觸摸事件像捏縮放。 – georgephillips

+1

您可能想要反映您在帖子中爲移動設備構建的事實。 – andresf

回答

2

我已經結束了與選項的組合。首先,我必須重寫發生的桌面事件才能獲得我的成果(觸摸,雙擊,雙擊左鍵和鼠標滾輪)。

在觸摸屏設計上,當有兩次以上的觸摸時,我暫停了標記的所有更新。這意味着當縮放操作時,任何捏事件都不會跳來跳去。

在普通的Web桌面設備上,我禁用了地圖上的縮放和雙擊事件,並重寫了我自己的事件處理程序。

爲了區分它們,我檢查了窗口對象中的ontouchstart事件。

function setDraggable(draggable) { 
    if ("ontouchend" in document) { 
     return; 
    } 
    var options = { 
     draggable: draggable, 
     panControl: draggable, 
     scrollwheel: draggable 
    }; 
    this.map.setOptions(options); 
}, 

zoom_changedidle比賽時,沒有真正有幾個原因的選項:

  1. idle事件僅被調用時,地圖是閒置和動畫的量我這樣做從來沒有被叫了。
  2. 每個步驟的動畫重新映射了後續標記上的地圖,因此zoom_changed事件將在動畫幀之前調用該中心。
  3. 由於動畫的數量不是平移到中心的想法是減少動畫幀並提高性能。
+0

當您檢測到兩次觸摸時,如何暫停標記更新? – leon

2

儘管有可能爭辯說雙擊地圖或滾輪縮放地圖時不需要考慮鼠標位置(因爲您正在對地圖對象執行操作,而不是在地圖上的某個位置),但捏合到-zoom是總是取決於位置,因爲您在地點周圍物理拉伸或擠壓地圖。改變這種行爲顯然是不直觀的。

在這種情況下,您應該聽取zoom_changedidle,然後將地圖平移到最近,以便用戶可以看到發生了什麼。

可能即使使用這些事件來處理默認的雙擊或鼠標滾輪行爲,以便顯而易見您正在更改用戶通常具有的控制級別。

16

這是我如何做的:

var options = { 
    draggable: false, 
    scrollwheel: false, 
    panControl: false, 
    maxZoom: Zoom, 
    minZoom: Zoom, 
    zoom: Zoom, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 

正如你所看到的,MAXZOOM和MINZOOM設置爲相同的值有助於阻止用戶雙擊事件。