\r\n```javascript\r\n\r\nwindow.onload = function() {\r\n\r\n //要素の取得\r\n var elements = document.getElementsByClassName(\"drag-and-drop\");\r\n\r\n //要素内のクリックされた位置を取得するグローバル(のような)変数\r\n var x;\r\n var y;\r\n\r\n //マウスが要素内で押されたとき、又はタッチされたとき発火\r\n for(var i = 0; i < elements.length; i++) {\r\n elements[i].addEventListener(\"mousedown\", mdown, false);\r\n elements[i].addEventListener(\"touchstart\", mdown, false);\r\n }\r\n\r\n //マウスが押された際の関数\r\n function mdown(e) {\r\n\r\n //クラス名に .drag を追加\r\n this.classList.add(\"drag\");\r\n\r\n //タッチデイベントとマウスのイベントの差異を吸収\r\n if(e.type === \"mousedown\") {\r\n var event = e;\r\n } else {\r\n var event = e.changedTouches[0];\r\n }\r\n\r\n //要素内の相対座標を取得\r\n x = event.pageX - this.offsetLeft;\r\n y = event.pageY - this.offsetTop;\r\n\r\n //ムーブイベントにコールバック\r\n document.body.addEventListener(\"mousemove\", mmove, false);\r\n document.body.addEventListener(\"touchmove\", mmove, false);\r\n }\r\n\r\n //マウスカーソルが動いたときに発火\r\n function mmove(e) {\r\n\r\n //ドラッグしている要素を取得\r\n var drag = document.getElementsByClassName(\"drag\")[0];\r\n\r\n //同様にマウスとタッチの差異を吸収\r\n if(e.type === \"mousemove\") {\r\n var event = e;\r\n } else {\r\n var event = e.changedTouches[0];\r\n }\r\n\r\n //フリックしたときに画面を動かさないようにデフォルト動作を抑制\r\n e.preventDefault();\r\n\r\n //マウスが動いた場所に要素を動かす\r\n drag.style.top = event.pageY - y + \"px\";\r\n drag.style.left = event.pageX - x + \"px\";\r\n\r\n //マウスボタンが離されたとき、またはカーソルが外れたとき発火\r\n drag.addEventListener(\"mouseup\", mup, false);\r\n document.body.addEventListener(\"mouseleave\", mup, false);\r\n drag.addEventListener(\"touchend\", mup, false);\r\n document.body.addEventListener(\"touchleave\", mup, false);\r\n\r\n }\r\n\r\n //マウスボタンが上がったら発火\r\n function mup(e) {\r\n var drag = document.getElementsByClassName(\"drag\")[0];\r\n\r\n //ムーブベントハンドラの消去\r\n document.body.removeEventListener(\"mousemove\", mmove, false);\r\n drag.removeEventListener(\"mouseup\", mup, false);\r\n document.body.removeEventListener(\"touchmove\", mmove, false);\r\n drag.removeEventListener(\"touchend\", mup, false);\r\n\r\n //クラス名 .drag も消す\r\n drag.classList.remove(\"drag\");\r\n }\r\n\r\n}\r\n```\r\n\r\n### 試したこと\r\n\r\nz-indexなどを試したが分からなかった\r\n\r\n### 補足情報(FW/ツールのバージョンなど)\r\n\r\nここにより詳細な情報を記載してください。","answerCount":1,"upvoteCount":0,"datePublished":"2019-11-25T03:38:57.813Z","dateModified":"2019-11-25T03:38:57.813Z","acceptedAnswer":{"@type":"Answer","text":"> 要素をドラッグしてドロップしたところの座標を知りたい\r\n\r\nマウス操作用のイベントリスナについて\r\n``mousedown`` はありますが ``mouseup`` イベント~~がありません~~。ごめんなさい。間違いです。\r\n訂正)mouseup 時に マウスの位置取得をしてみてはどうでしょうか?\r\n\r\nドラッグ&ドロップのマウスボタンの動きを確認してみましょう。\r\n1. ドラッグ ... マウスボタン押下(mousedown) / タッチ(指の数:0->1)\r\n2. ドロップ ... マウスボタン開放(mouseup) / タッチ(指の数:1->0)","dateModified":"2019-11-25T05:37:44.152Z","datePublished":"2019-11-25T05:34:53.587Z","upvoteCount":0,"url":"https://teratail.com/questions/225319#reply-329617"},"suggestedAnswer":[],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"JavaScriptに関する質問","url":"https://teratail.com/tags/JavaScript"},{"@type":"ListItem","position":3,"name":"JavaScript","url":"https://teratail.com/tags/JavaScript"}]}}}
質問するログイン新規登録
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2261閲覧

ドラッグ&ドロップで座標を取得

minomonnta

総合スコア9

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/11/25 03:38

0

0

前提・実現したいこと

要素をドラッグしてドロップしたところの座標を知りたい

発生している問題・エラーメッセージ

要素をドラッグ&ドロップしても座標を取得できない

該当のソースコード

html

1 2<div class="drag-and-drop" id="red-box" style="top:1;left:0;background-color:#f48fb1;">drag</div> 3<div class="drag-and-drop" id="blue-box" style="top:1;left:110px;background-color:#64b5f6;">and</div> 4<div class="drag-and-drop" id="yellow-box" style="top:1;left:220px;background-color:#ffe082;">drop</div> 5<div id="target" style="width:500px; height:200px; border: solid 1px navy"> 6</div> 7<script> 8document.getElementById( "target" ).onclick = function( event ) { 9var x = event.pageX ; // 水平の位置座標 10var y = event.pageY ; // 垂直の位置座標 11alert(x + ":" + y); // 確認のためアラート表示 12} 13</script> 14```javascript 15 16window.onload = function() { 17 18 //要素の取得 19 var elements = document.getElementsByClassName("drag-and-drop"); 20 21 //要素内のクリックされた位置を取得するグローバル(のような)変数 22 var x; 23 var y; 24 25 //マウスが要素内で押されたとき、又はタッチされたとき発火 26 for(var i = 0; i < elements.length; i++) { 27 elements[i].addEventListener("mousedown", mdown, false); 28 elements[i].addEventListener("touchstart", mdown, false); 29 } 30 31 //マウスが押された際の関数 32 function mdown(e) { 33 34 //クラス名に .drag を追加 35 this.classList.add("drag"); 36 37 //タッチデイベントとマウスのイベントの差異を吸収 38 if(e.type === "mousedown") { 39 var event = e; 40 } else { 41 var event = e.changedTouches[0]; 42 } 43 44 //要素内の相対座標を取得 45 x = event.pageX - this.offsetLeft; 46 y = event.pageY - this.offsetTop; 47 48 //ムーブイベントにコールバック 49 document.body.addEventListener("mousemove", mmove, false); 50 document.body.addEventListener("touchmove", mmove, false); 51 } 52 53 //マウスカーソルが動いたときに発火 54 function mmove(e) { 55 56 //ドラッグしている要素を取得 57 var drag = document.getElementsByClassName("drag")[0]; 58 59 //同様にマウスとタッチの差異を吸収 60 if(e.type === "mousemove") { 61 var event = e; 62 } else { 63 var event = e.changedTouches[0]; 64 } 65 66 //フリックしたときに画面を動かさないようにデフォルト動作を抑制 67 e.preventDefault(); 68 69 //マウスが動いた場所に要素を動かす 70 drag.style.top = event.pageY - y + "px"; 71 drag.style.left = event.pageX - x + "px"; 72 73 //マウスボタンが離されたとき、またはカーソルが外れたとき発火 74 drag.addEventListener("mouseup", mup, false); 75 document.body.addEventListener("mouseleave", mup, false); 76 drag.addEventListener("touchend", mup, false); 77 document.body.addEventListener("touchleave", mup, false); 78 79 } 80 81 //マウスボタンが上がったら発火 82 function mup(e) { 83 var drag = document.getElementsByClassName("drag")[0]; 84 85 //ムーブベントハンドラの消去 86 document.body.removeEventListener("mousemove", mmove, false); 87 drag.removeEventListener("mouseup", mup, false); 88 document.body.removeEventListener("touchmove", mmove, false); 89 drag.removeEventListener("touchend", mup, false); 90 91 //クラス名 .drag も消す 92 drag.classList.remove("drag"); 93 } 94 95}

試したこと

z-indexなどを試したが分からなかった

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

要素をドラッグしてドロップしたところの座標を知りたい

マウス操作用のイベントリスナについて
mousedown はありますが mouseup イベントがありません。ごめんなさい。間違いです。
訂正)mouseup 時に マウスの位置取得をしてみてはどうでしょうか?

ドラッグ&ドロップのマウスボタンの動きを確認してみましょう。

  1. ドラッグ ... マウスボタン押下(mousedown) / タッチ(指の数:0->1)
  2. ドロップ ... マウスボタン開放(mouseup) / タッチ(指の数:1->0)

投稿2019/11/25 05:34

編集2019/11/25 05:37
AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問