ホ−ム » 応用サンプル » マーカをドラッグする

マーカをドラッグする

実行結果

次の例では、マーカをドラッグして移動できます。

Your borwser is not supporting object tag. Please use one of the latest browsers.
Go to ./apisample/advanced/marker_drag.html

ソースコードと解説

マーカをドラッグして移動させるには、ZDC.addListener()を利用します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<script src="http://api.its-mo.com/cgi/loader.cgi?key=JSZ752c40ded32d&ver=2.0&api=zdcmap.js&enc=EUC&force=1" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
    var map, mrk, mkrLatLon, dragging, difLat, difLon,
        lat = 35.6778614, lon = 139.7703167;

    function loadMap() {
        var latlon = new ZDC.LatLon(lat, lon);
        map = new ZDC.Map(
            document.getElementById('ZMap'),
            {
                latlon: latlon,
                zoom: 3
            }
        );

        /* 地図上の緯度経度を取得(getPointerPosition)できるようにする */
        map.pointerPositionOn();

        /* マーカを作成 */
        mkrLatLon = new ZDC.LatLon(lat, lon);
        mrk = new ZDC.Marker(mkrLatLon);

        /* マーカを追加 */
        map.addWidget(mrk);

        /* 地図にイベントを追加 */
        ZDC.addListener(map, ZDC.MAP_MOUSEMOVE, onMouseMove);
        ZDC.addListener(map, ZDC.MAP_MOUSEUP, onMouseUp);

        /* マーカにイベントを追加 */
        ZDC.addListener(mrk, ZDC.MARKER_MOUSEMOVE, onMouseMove);
        ZDC.addListener(mrk, ZDC.MARKER_MOUSEDOWN, onMouseDown);
        ZDC.addListener(mrk, ZDC.MARKER_MOUSEUP, onMouseUp);

        /* documentにイベントを追加 */
        ZDC.addDomListener(document, 'mouseup', onMouseUp);

    }

    /* マウスダウンイベント処理 */
    function onMouseDown() {
        /* マウスダウン位置の緯度経度とマーカの緯度経度の差分を保持 */
        var cLatLon = map.getPointerPosition();
        difLat = cLatLon.lat - mkrLatLon.lat;
        difLon = cLatLon.lon - mkrLatLon.lon;
        dragging = true;
    }

    /* マウスムーブイベント処理 */
    function onMouseMove() {
        /* ドラッグ中のみ処理させる */
        if(dragging) {
            var latlon = map.getPointerPosition();

            /* マーカ表示緯度経度を取得 */
            var mkLat = latlon.lat - difLat;
            var mkLon = latlon.lon - difLon;
            mkrLatLon = new ZDC.LatLon(mkLat, mkLon);
            mrk.moveLatLon(mkrLatLon);
        }
    }

    /* マウスアップイベント処理 */
    function onMouseUp() {
        if(dragging) {
            dragging = false;
        }
    }
//]]>
</script>
</head>

<body onload="loadMap();">
    <div id="ZMap" style="border:1px solid #777777; width:500px; height:300px; top:0px; left:20px; position:absolute;"></div>
</body>
</html>