はじめに
bootstrapを使用していて、モーダルでぴょこっとだしたい、しかもその中で地図画像をだして、座標を設定したい!
というよくありそうですがあまりなさそうなものを作成しました。
コアなニーズになるかと思いますが、もし使う機会がある方は使ってみてください。
環境
- Cssフレームワーク:Bootstrap, pure
- jqueryバージョン:3.2.1
ソースコード
- get_coordinate.js
.js
$('input').click(function() {
var count=0;
document.getElementById("map").innerHTML="<img id='imagemap' src="+MAPIMAGE+" height='380px'>";
var beforex=$("#xcoord").val();
var beforey=$("#ycoord").val();
$("#xinput").val(beforex);
$("#yinput").val(beforey);
if(!beforex || !beforey){
count=0;
}else{
var element = document.createElement('span');
element.setAttribute("id", "point");
element.innerHTML = "●";
element.style.position = "absolute";
element.style.color ="#00FFFF";
element.style.left = Number(beforex)+10 + "px";
element.style.top = Number(beforey)+20 + "px";
var obj = document.getElementById("map");
obj.appendChild(element);
count +=1;
}
document.onmousemove = function(e) {
var x;
var y;
var areaOffset = $('#map').offset();
//pageX/Yプロパティ
x = parseInt(e.pageX-areaOffset.left);
y = parseInt(e.pageY-areaOffset.top);
if(x>0 && x<466 && y>0 && y<380){
document.getElementById('zx').innerHTML = "X:" + x;
document.getElementById('zy').innerHTML = "Y:" + y;
}else{
document.getElementById('zx').innerHTML = "X:" + "測定不能";
document.getElementById('zy').innerHTML = "Y:" + "測定不能";
}
}
$("#map").on('click',function(event){
var x;
var y;
var areaOffset = $('#map').offset();
//pageX/Yプロパティ
x = parseInt(event.pageX-areaOffset.left);
y = parseInt(event.pageY-areaOffset.top);
if(x>0 && x<466 && y>0 && y<466){
if(count >0){
$('span#point').remove();
count =0;
}
var element = document.createElement('span');
element.setAttribute("id", "point");
element.innerHTML = "●";
element.style.position = "absolute";
element.style.color ="#00FFFF";
element.style.left = x+10 + "px";
element.style.top = y+20 + "px";
var obj = document.getElementById("map");
obj.appendChild(element);
$("#xinput").val(x);
$("#yinput").val(y);
count +=1;
}
});
$('#modal-coordinate-tmp').modal();
});
coordinate.html
.html
<input id="xcoord" type="text" placeholder="X座標" disabled="disabled" ></input>
<input id="ycoord" type="text" placeholder="Y座標" disabled="disabled" ></input>
<div class="modal fade" id="modal-coordinate-tmp" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">クリックしてください</h4>
<button type="button" class="close" data-dismiss="modal"><span>×</span></button>
</div>
<form class="pure-form" method="get">
<div class="modal-body">
<div class="modal-text">
<p></p>
<div id="map">
</div>
<div class="pure-g">
<div id="zx" class="pure-u-1-2"></div>
<div id="zy" class="pure-u-1-2"></div>
</div>
<div class="pure-g">
<div class="pure-u-1-2">
<input id="xinput" class="pure-input-1" type="text" placeholder="X座標"></input>
</div>
<div class="pure-u-1-2">
<input id="yinput" class="pure-input-1" type="text" placeholder="Y座標"></input>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button id="cancelbutton-coordinate" type="button" data-dismiss="modal"><img id="MORDAL_CANCELBUTTON_ICON"></img>キャンセル</button>
<button id="decisionbutton-coordinate" type="button" data-dismiss="modal"><img id="MORDAL_OKBUTTON_ICON"></img>OK</button>
</div>
</form>
</div>
</div>
</div>
説明
- get_coordinate.jsを簡単に説明します
- 現在の値を取得し、モーダルウィンドウ内に表示している値にセットします。
- document.onmousemoveを用いてマウスホバー中のモーダルウィンドウ内での座標を取得します
- $("#map").on('click',function(event){});でマップ画像内をクリックしたときのみモーダルウィンドウ内のinputに座標を置き換えます。
おわりに
QiitaにUpするときにソースが特定できそうな情報を切り抜いたので、
動作できないという際にはid名の紐付きがずれてる可能性があります。
もし、動作しない等あれば、コメントいただければ、確認したいと思います。