マーカをドラッグする (スマートフォン・タブレット)

実行結果

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

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

ソースコードと解説

マーカをドラッグして移動させるには、ZDC.addListener()を利用します。
setIntervalを使用し、一定時間ごとにマウスポインタの表示位置の緯度経度でマーカの緯度経度を変更します。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
<script src="//test.api.its-mo.com/v3/loader?key=JSZddc5111626c8|Zo4wz&api=zdcmap.js,control.js&enc=UTF8" type="text/javascript"></script>
<script type="text/javascript">

    var map, mrk, mkrLatLon, dragging = false, difLat, difLon, timerid;

    function loadMap() {
         map = new ZDC.Map(
            document.getElementById('ZMap'),
            {
                zoom: 9,
                mapType: ZDC.MAPTYPE_HIGHRES_LV18
            }
        );

        /* スケールバーを表示 */
        map.addWidget(new ZDC.ScaleBar());
        /* 通常のコントロールを表示 */
        map.addWidget(new ZDC.Control());

        /* マーカを作成 */
        mrk = new ZDC.Marker(
            map.getLatLon(),{
                color: ZDC.MARKER_COLOR_ID_YELLOW_L
            }
        );

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

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

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

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

    /* マウスダウンイベント処理 */
    function onMouseDown() {
        if(dragging) {
            return;
        }
        /* マウスダウン位置の緯度経度とマーカの緯度経度の差分を保持 */
        mkrLatLon = mrk.getLatLon();
        var cLatLon = map.getPointerPosition();
        difLat = cLatLon.lat - mkrLatLon.lat;
        difLon = cLatLon.lon - mkrLatLon.lon;
        dragging = true;
        /* 30ミリ秒ごとにマーカの緯度経度を変更する */
        timerid = setInterval(onMouseMove, 30);
    }

    /* マーカドラッグ中の処理 */
    function onMouseMove() {
        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;
            /* タイマーをクリアする */
            clearInterval(timerid);
        }
    }

</script>
</head>

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