質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.47%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

1回答

173閲覧

座標が表示できるhtmlを作ったが座標の要素がずれてしまう

jewel200322

総合スコア11

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2024/03/10 19:13

編集2024/03/10 19:22

実現したいこと

正確な座標にしたいが正確な位置よりずれてしまう

発生している問題・分からないこと

やっと上手くいったhtmlが作れましたが正確な位置を反映させたら斜め左上くらい座標が違うみたいです。正確な座標よりずれてしまいます。
元が正確な座標となると、画面からはみ出てしまう感じのズレになります。

Adobedwで見たら要素がずれてるみたいだったんですが、、、
何度か直したのですがわかりません。
多分要素のズレで正確な座標じゃなくなってるのです。
初期値にすれば治るんですかね?

ちなみに座標ステータスがわかるHTMLを制作しています。ズレ以外はうまくいきました

エラーメッセージ

error

1例えば座標が(131,119)なはずが189px, 176pxの配置になってしまいます。

該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>画像の表示/ドラッグ</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 0; background-image: url(bk.png); /* 背景画像指定 */ overflow: hidden; /* スクロールを禁止 */ } #image { width: 100px; height: 100px; background-size: contain; background-repeat: no-repeat; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); cursor: move; /* ドラッグ可能なカーソル */ max-width: 100%; /* 拡大を防止 */ max-height: 100%; /* 拡大を防止 */ } .status { position: fixed; top: 20px; left: 20px; z-index: 1001; /* メニューより前面に表示 */ padding: 10px; background-color: rgba(0, 0, 0, 0.7); /* 半透明の黒 */ color: white; font-family: monospace; /* 文字を等幅フォントにする */ } </style> </head> <body> <input type="text" id="image-file-name"> <div id="image"></div> <div class="status" id="status">座標: ( - , - )</div> <script> // 画像ファイル名を取得する関数 function getFileName() { return document.getElementById("image-file-name").value; } // 画像を表示する関数 function showImage(fileName) { const image = document.getElementById("image"); image.style.backgroundImage = `url(${fileName})`; makeDraggable(image); // 画像をドラッグ可能にする } // 画像をドラッグして移動できるようにする関数 function makeDraggable(element) { let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; if (document.getElementById(element.id)) { // カーソルがクリックされたときにドラッグを開始する関数 element.onmousedown = function(e) { e.preventDefault(); pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; // カーソルが動いたときに要素を移動する関数を呼び出す document.onmousemove = function(e) { e.preventDefault(); pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; // 要素を移動 element.style.top = (element.offsetTop - pos2) + "px"; element.style.left = (element.offsetLeft - pos1) + "px"; // ステータスを更新 document.getElementById("status").innerText = `座標: (${element.style.left}, ${element.style.top})`; } }; } // ドラッグを停止する関数 function closeDragElement() { document.onmouseup = null; document.onmousemove = null; } } // 画像を表示するための処理 const fileNameInput = document.getElementById("image-file-name"); fileNameInput.addEventListener("change", function() { const fileName = getFileName(); showImage(fileName); }); </script> </body> </html>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

chatgptなどに聞いたら
オブジェクトの座標を左上からずらして、(57, 57)ではなく(56, 56)にするためには、JavaScriptのコードを修正する必要があります。具体的には、要素の初期位置の設定部分を調整します。

誤差を修正するには、getCoordinates() 関数を修正する必要があります。

修正方法

以下の2つの方法のいずれかを選択できます。

  1. getComputedStyle() 関数を使う

この方法は、transform プロパティを使って要素を中央に配置することで、誤差の影響を受けずに座標を取得できます。

などと言われるがままにソースをコピペしたり、色々したのですが座標の不具合だけは変わらずです💦

補足

特になし

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

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

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

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

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

guest

回答1

0

ベストアンサー

どのような座標になった時が「正確」となるのかわかりませんが、現状のコードですと、transform: translate(-50%, -50%)がありますから、画像の上端がビューポートの上端に接したときに、top0にならないはずです。

これを0にしたいのであれば、transform: translate(-50%, -50%)を消してみてください。

投稿2024/03/11 11:11

Lhankor_Mhy

総合スコア36134

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

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

jewel200322

2024/03/11 11:17

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問