LoginSignup
1
0

More than 5 years have passed since last update.

モーダルウィンドウ内の座標の取得

Last updated at Posted at 2018-03-07

はじめに

bootstrapを使用していて、モーダルでぴょこっとだしたい、しかもその中で地図画像をだして、座標を設定したい!
というよくありそうですがあまりなさそうなものを作成しました。
コアなニーズになるかと思いますが、もし使う機会がある方は使ってみてください。

環境

  • Cssフレームワーク:Bootstrap, pure
  • jqueryバージョン:3.2.1

ソースコード

  • get_coordinate.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

<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>&times;</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名の紐付きがずれてる可能性があります。
もし、動作しない等あれば、コメントいただければ、確認したいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0