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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

2214閲覧

画像を移動するプログラムが作りたいです

munekoda

総合スコア23

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2015/06/09 12:24

クリックした画像をマウスの動きと同じように動かして、もう一度クリックしたらそこに画像が置けるようなプログラムが作りたいです。(ドラッグ&ドロップではない)作ってみたのですが、画像の移動まではできたものの、画像が置けません。だれかアドバイスまたは助言をお願いします。下のソースの概要はoffsetでid idouの要素の座標を求め、クリックした部分の座標との距離の大きさを「ex-cx,ey-cy」で出しています。その数値を動かしているポインタの座標から引いて画像があるべき座標を出しています。また、flagで判定して-1のときに置くようにしたのですが全然置けませんでした。

<!-- jquery使う--> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script> <!-- 終了 --> <script><!-- var flag = -1; $(document).ready(function(){ $("#idou").click(function(e){ flag = -flag; var ex = e.clientX; var ey = e.clientY; //要素の座標 var ox = $("#idou").offset().left; var oy = $("#idou").offset().top; if(flag==1){ $("html").mousemove(function(e){ //マウスの座標取得 var cx = e.clientX; var cy = e.clientY; var rx = cx + ox - ex; // var ry = cy + oy - ex; $("#idou").css({position:"absolute",top:ry,left:rx}); }); } }); }); -->

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

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

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

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

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

guest

回答1

0

ベストアンサー

flagを判定するif文をmousemoveの外ではなく内側に書くと置けるようになると思います。
それと、var ry = cy + oy - ex; のところの最後はeyですね。

これで意図した動作になると思いますが、
その他で気になったところも書いておきます。

  • mousemoveはclickするたびに設定する必要はないので、click関数の外に書いたほうがよさそう。
  • clientX、cliengYはウィンドウ上の座標のため、ページにスクロールがあると位置がずれるのでpageX、pageYを使うほうがよさそう。
  • flagはグローバル変数にしないほうよさそう。
  • $("#idou")は何度か使うので、毎回取得せずに変数に入れて使うほうがよさそう。

参考までに修正したコードを貼っておきます。

lang

1$(document).ready(function(){ 2 var flag = -1, 3 ex, 4 ey, 5 ox, 6 oy, 7 $idou = $("#idou"); 8 9 $idou.click(function(e){ 10 flag = -flag; 11 ex = e.pageX; 12 ey = e.pageY; 13 ox = $idou.offset().left; 14 oy = $idou.offset().top; 15 }); 16 17 $("html").mousemove(function(e){ 18 if(flag==1){ 19 var cx = e.pageX, 20 cy = e.pageY, 21 rx = cx + ox - ex, 22 ry = cy + oy - ey; 23 $idou.css({position:"absolute",top:ry,left:rx}); 24 } 25 }); 26});

投稿2015/06/09 14:40

編集2015/06/09 14:41
ina

総合スコア127

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

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

munekoda

2015/06/10 02:55

できました。ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問