次の例では、スタティックユーザウィジットをドラッグして移動できます。
スタティックユーザウィジットをドラッグして移動させるには、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,userwidget.js&enc=EUC&force=1" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[ var map, widget, widgetTL, difT, difL, isopenbtn = false, dragging = false, lat = 35.6778614, lon = 139.7703167; function loadMap() { map = new ZDC.Map( document.getElementById('ZMap'), { latlon: new ZDC.LatLon(lat, lon), zoom: 3 } ); /* 地図上の緯度経度を取得(getPointerPosition)できるようにする */ map.pointerPositionOn(); /* スタティックユーザウィジットを作成 */ widgetTL = new ZDC.TL(10, 20); /* 緯度経度を取得するためにpropagationをtrueにする */ var widgetlabel = {html: getCloseHtml(), propagation: true}; widget = new ZDC.StaticUserWidget(widgetTL, widgetlabel); /* スタティックユーザウィジットを追加 */ map.addWidget(widget); /* スタティックユーザウィジットを表示 */ widget.open(); ZDC.addListener(map, ZDC.MAP_MOUSEMOVE, onMouseMove); ZDC.addListener(map, ZDC.MAP_MOUSEUP, onMouseUp); ZDC.addListener(map, ZDC.MAP_CHG_ZOOM, function() { if(!isopenbtn){ widget.setHtml(getCloseHtml()); } }); ZDC.addListener(widget, ZDC.STATICUSERWIDGET_MOUSEDOWN, onMouseDown); ZDC.addListener(widget, ZDC.STATICUSERWIDGET_MOUSEUP, onMouseUp); /* 地図領域の外でマウスアップ時にドラッグを終了する */ ZDC.addDomListener(document, 'mouseup', onMouseUp); }; /* マウスダウンイベント処理 */ function onMouseDown() { map.dragOff(); /* マウスダウン位置とスタティックユーザウィジットの配置位置の差分を保持 */ var pLatLon = map.getPointerPosition(); var pTL = map.latLonToTL(pLatLon); difT = widgetTL.top - pTL.top difL = pTL.left - widgetTL.left dragging = true; }; /* マウスアップイベント処理 */ function onMouseUp() { dragging = false; map.dragOn(); }; /* マウスムーブイベント処理 */ function onMouseMove() { /* ドラッグ中のみ処理させる */ if(dragging) { /* スタティックユーザウィジットの配置位置を変更 */ var latlon = map.getPointerPosition(); var cTL = map.latLonToTL(latlon); var wgtT = cTL.top + difT; var wgtL = cTL.left - difL; widget.movePosition(new ZDC.TL(wgtT, wgtL)); widgetTL = new ZDC.TL(wgtT, wgtL); } /* closeボタン表示中は緯度経度の値を更新する */ if(!isopenbtn) { widget.setHtml(getCloseHtml()); } }; /* closeボタン押下時の処理 */ function closeclick() { widget.setHtml(getOpenHtml()); isopenbtn = true; }; /* openボタン押下時の処理 */ function openclick() { widget.setHtml(getCloseHtml()); isopenbtn = false; }; /* openボタンを表示するHTMLソース */ function getOpenHtml() { var openhtml; openhtml = '<div onMouseDown="return false;" style="background-color: #FFFFFF; '; openhtml += 'border:1px solid #777777;">ドラッグで移動できます'; openhtml += '<input type="button" value="open" onclick="openclick();";></div>'; return openhtml; }; /* closeボタンと中心点の緯度経度を表示するHTMLソース */ function getCloseHtml() { var ll = map.getLatLon(); /* 度分秒形式に変換 */ lon = ZDC.degTodms(ll.lon); lat = ZDC.degTodms(ll.lat); var lon_txt = 'E '+lon.deg+'°'+lon.min+'′'+lon.sec+'″', lat_txt = 'N '+lat.deg+'°'+lat.min+'′'+lat.sec+'″'; var closehtml; closehtml = '<div onMouseDown="return false;" style="background-color: #FFFFFF; '; closehtml += 'border:1px solid #777777;">ドラッグで移動できます'; closehtml += '<input type="button" value="close" onclick="closeclick();">'; closehtml += '<ul style="list-style-type: none; margin: 0; padding: 0;">'; closehtml += '<li>地図中心の緯度経度</li>'; closehtml += '<li>' + lon_txt + '</li>'; closehtml += '<li>' + lat_txt + '</li>'; closehtml += '</ul></div>'; return closehtml; }; //]]> </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>