2017-07-21 8 views
1

Ist es möglich, die gleiche Kartenmitte bei den Zoom-In/Out-Ereignissen zu behalten? Sei es mit dem Scrollrad, Doppelklick oder mit den Zoom-Reglern sollte es sich gleich verhalten.Google Maps Api - Ändern Sie nicht die Kartenmitte auf Zoom

Mir ist aufgefallen, dass die Mauszeigerposition auf der Karte beim Zoomen mit dem Scrollrad verzerrt ist. Ich habe keine Optionen in den Docs gefunden, aber diese Verzerrung wäre ideal.

here is a simple fiddle von, wie ich meine Karte initialisiere.

var map = new google.maps.Map(document.getElementById("map_div"), { 
    center: new google.maps.LatLng(33.808678, -117.918921), 
    zoom: 15, 
    disableDefaultUI: true 
    }); 
+0

Es gibt keine API-Funktionen, das zu tun. Es gibt jedoch keinen Grund, warum Sie die gewünschte Funktionalität nicht implementieren können, indem Sie die API-Implementierung deaktivieren und dies selbst tun. – geocodezip

+0

Ich hatte Angst, dass es keine Möglichkeit gibt, dies "out of the box" zu tun, aber ich werde mich darum kümmern. Vielen Dank. – randomguy04

+0

Warum möchten Sie? Benutzer, die mit Google Maps-API auf anderen Websites interagiert haben, wissen, dass beim Zoomen mit dem Scrollrad mit Voreingenommenheit darauf zoomen, wo sich ihr Zeiger befindet. Das Überschreiben dieser Funktionalität würde nur dazu dienen, Ihre Benutzer zu ärgern/irritieren. Nachdem dies gesagt wurde, können Sie das Scrollrad-Zoom in den mapOptions deaktivieren, dann hören Sie sich Scrollwheel an und machen etwas wie "map.setZoom (map.getZoom() + 1)", was einen Zoom ohne Neuzentrierung verursachen würde. – Adam

Antwort

1

@ Vorschlag Adams auf den Kommentaren Nach mir den Scroll-Rad-Zoom sowie der Doppelklick zoomen, wenn Instanziieren die Karte und die hinzugefügt Event-Listener deaktiviert diese Ereignisse mit meiner eigenen Implementierung zu behandeln.

Hier ist ein working fiddle und der Code erklärt:

/* 
* declare map as a global variable 
*/ 
var map; 
/* 
* use google maps api built-in mechanism to attach dom events 
*/ 
google.maps.event.addDomListener(window, "load", function() { 
    var myMap = document.getElementById("map_div"); 
    /* 
    * create map 
    */ 
    var map = new google.maps.Map(myMap, { 
    center: new google.maps.LatLng(33.808678, -117.918921), 
    zoom: 15, 
    disableDefaultUI: true, 
    scrollwheel: false, 
    disableDoubleClickZoom: true 
    }); 
    //function that will handle the wheelEvent 
    function wheelEvent(event) { 
    var e = window.event || e; // old IE support 
    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); //to know whether it was wheel up or down 
    map.setZoom(map.getZoom() + delta); 
    } 

    function zoomIn() { 
    map.setZoom(map.getZoom() + 1); 
    } 

    //add a normal event listener on the map container 
    myMap.addEventListener('mousewheel', wheelEvent, true); 
    myMap.addEventListener('DOMMouseScroll', wheelEvent, true); 

    //same with the double click 
    myMap.addEventListener('dblclick', zoomIn, true); 

    //add center changed listener for testing 
    google.maps.event.addListener(map, 'center_changed', function() { 
    console.log("this is what i'm trying to avoid"); 
    }); 
}); 
Verwandte Themen