2011-08-10 20 views

cevap

2

Bu, şu anda Maps API V3 ile yapılamıyor. Burada bir özellik isteğinde bulunmadan düşünün: Bazı özel Div yüzer Harita Hareketi üzerinde yeniden konumlandırılan gerek harita üzerinde olan, bugün bu aynı sorun koştu

http://code.google.com/p/gmaps-api-issues/

4

. Yeniden konumlandırmam, kullanıcı farenin gitmesine izin vermeden önce sürüklendikten sonra tam bir duraklamaya geldiği sürece gayet iyi çalıştı (yani momentum olmayacaktı), ancak eğer hızlı bir şekilde sürüklendiyse ve divun serbest kalması biraz daha sona erecekti.

Bunu düzeltmek için, ben sürükleme olayı ve boşta olay girdiklerini:

var map = /* All the map config */ 
var stickyCenter = map.getCenter(); 
/* ... Code ... */ 
google.maps.event.addListener(map, 'drag', function(){ stickyCenter = map.getCenter(); }); 
google.maps.event.addListener(map, 'idle', function() { map.setCenter(stickyCenter); }); 

ne olur sen sürükledi ve sonra harita tamamen durduğu olmasıdır (momentumun yapıldıktan sonra) harita 'yerine oturdu'. yaslama çok ani olursa

, biri muhtemelen panto olabilir veya bir şekilde hareket animasyon. Umarım bu yardımcı olur, mükemmel değildir, ancak bir sürükleme olayından gelen ivmeyi tersine çevirmenin bir yolu.

+1

v3'ten itibaren, "dragend" ve "boşta" olayları arasındaki süreyi hesaba katacak olan "center_changed" etkinliğine bağlanabilirsiniz. https://developers.google.com/maps/documentation/javascript/events –

+0

@DevinMcInnis Haklısınız. Bu, google kodunda açık olan sorun hakkında da tartışılmıştır: https://code.google.com/p/gmaps-api-issues/issues/detail?id=3543&q=idle&colspec=ID%20Type%20Status%20Introduced% 20Fixed% 20Summary% 20Stars% 20ApiType% 20Internal Özellikle: "Bu kullanım şekli bir kez' dragend' olay tetiklenir bir 'idle' dinleyicisi ekleyerek çözülebilir boşta olay yangınlar haritası dinlenmeye kez geldiğinde.. Bindirmeyi konumlandırmak için, 'drag'' yerine 'bounds_changed' veya 'center_changed' komutunu kullanın – EdgeCaseBerg

0

En azından momentumu tersine çevirmenin mümkün olduğuna eminim. Birileri lütfen yanılıyorsam beni düzeltin! Kolaylık olması açısından, örneğin, en haritanız konteyner 100vw bir width ve 100vh bir height sahiptir diyelim. mouseup olayı tarafından çağrılan bir işlevde getCenter()'u arayın ve sonra bu koordinatları hemen setCenter() için kullanın?

function initMap(){ 

    ... 

    var win = window; 
    google.maps.event.addDomListener(win, 'mouseup', setCoords); 
    function setCoords(){ 
     var x = myMap.getCenter(); 
     var lat = x.lat(); 
     var lng = x.lng(); 
     myMap.addListener('center_changed', function(lat, lng){ 
     myMap.setCenter(new google.maps.LatLng(lat, lng)); 
    }; 
}; 

aslında Yukarıdaki kod çalışır, ama vurucu tarayıcı görünüşte aşırı yüklü hale gelene kadar sadece bir kez çalıştığını ve hatayı Yakalanmayan RangeError üretir: Maksimum çağrı yığını boyutu aştı.

Şimdi ne yapılacağından emin değilsiniz.

Daha fazla bilgi için bu here.

+0

center_changed dinleyicisi, center_changed olayını başlatan ve sonsuz bir döngü oluşturan harita merkezini ayarlar – geocodezip

+0

@geocodezip Yanıtladığınız için teşekkürler. haklısın, bunu biraz önce fark ettim: Komik olan şey, 'myMap.addListener ...' eklemeden kusursuz çalışmasını bekleyeceksin, ama değil, kod varmış gibi çalışıyor. Lütfen diğer konu başlığına bakın http://stackoverflow.com/questions/39626454/functions-uncaught-rangeerror-maximum-call-stack-size-exceeded-with-google-m –

5

Bu hiçbir çözüm ile bilinen bir sorun olduğunu tahmin belgesiz seçeneği disablePanMomentumör .:

new google.maps.Map(document.getElementById(id), { 
    disablePanMomentum: true, 
    backgroundColor: 'none', 
    disableDefaultUI: true, 
    center: { 
     lat: 40.674, 
     lng: -73.945 
    }, 
    zoom: 2, 
    ... 
+0

Güzel olanı. nasıl bulduğunuzu merak ettiniz –

+1

@PedroAdameVergara Geniş kapsamlı tersine mühendislik veya bazı temel regex becerileri.Ayrıca, – Orwellophile

+0

@ orwellophile Bunu bulmak için regex kullanırım? Bilmek isterim, şerefe –

İlgili konular