0

マップ上でマーカーを移動したいだけで、変数をグローバルとして宣言しmapましmarkerたが、関数で使用できませんmoveMarker()。私は JavaScript を初めて使用するので、この問題は単純かもしれませんが、まだ解決できません。誰か解決してくれませんか?

var map;
var marker;

function initialize() {
    var myLatLng = new google.maps.LatLng(50, 50),
        myOptions = {
            zoom: 4,
            center: myLatLng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        },
        map = new google.maps.Map(document.getElementById('map-canvas'), myOptions);
    marker = new google.maps.Marker({
        position: myLatLng,
        map: map,
        draggable: true
    });
    marker.setMap(map);
    setTimeout("moveMarker(1)", 2000);
}

function moveMarker(i) {
    //delayed so you can see it move
    if (i > 10) {
        return;
    }
    var myLatLng = new google.maps.LatLng(50 + 0.1 * i, 50 + 0.1 * i);
    marker.setPosition(myLatLng);
    map.panTo(myLatLng);
    var latlng = marker.getPosition();
    newlatlng = latlng.toString();
    marker.setTitle(newlatlng);
    setTimeout("moveMarker(" + (i + 1) + ")", 1500);
}

window.onload = function () {
    // Setup the dnd listeners.
    initialize();
};
4

2 に答える 2

2

「、」を「;」に置き換える必要があります。そうしないと、変数「マップ」を再定義していると見なされます。

            var map;
        var marker;

        function initialize() {
            var myLatLng = new google.maps.LatLng(50, 50);
            myOptions = {
                zoom: 4,
                center: myLatLng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById('map-canvas'), myOptions);
            marker = new google.maps.Marker({
                position: myLatLng,
                map: map,
                draggable: true
            });
            marker.setMap(map);
            setTimeout("moveMarker(1)", 2000);
        }

        function moveMarker(i) {
            //delayed so you can see it move
            if (i > 10) {
                return;
            }
            var myLatLng = new google.maps.LatLng(50 + 0.1 * i, 50 + 0.1 * i);
            marker.setPosition(myLatLng);
            map.panTo(myLatLng);
            var latlng = marker.getPosition();
            newlatlng = latlng.toString();
            marker.setTitle(newlatlng);
            setTimeout("moveMarker(" + (i + 1) + ")", 1500);
        }

        window.onload = function () {
            // Setup the dnd listeners.
            initialize();
        };
于 2013-09-05T12:46:05.587 に答える
0

問題は Google マップのPanTo方法ではありません。問題の理由はmyLatLng変数です。

myLatLng変数のスコープを に変更するとGlobal、問題は解決します。

このJSFiddle を確認してください

于 2013-09-05T12:46:55.283 に答える