
Javascript,jQuery初心者です。主にWINDOWS7、GoogleChrome使用です。
jQueryでシンプルなドラッグドロップ自作をやってみました。
<!DOCTYPE html>
<html>
<head>
<meta carset="utf-8">
<script src="js/jquery-1.11.0.min.js"></script>
<style>
#chr{ position:absolute; left:100px; top:100px; }
</style>
<body>
<div id="msg"></div>
<div id="chr">
<img src="parts/usl470.jpg">
</div>
<script>
dragflg=false;
$("#chr").mousedown(function(){ dragflg=true; $("#msg").html("on")})
.mouseup(function(){ dragflg=false; $("#msg").html("up")});
$(window).mousemove(function(e){
if(dragflg)
{ $("#chr").css("left",e.clientX-20+"px")
.css("top",e.clientY-20+"px");
} });
</script>
</body>
</head>
</html>
mousedown、mouseupの検出を確認するために、隅にon、upと表示するようにしてあります。
思惑通り、押すとon、離すとupが表示されますが、ドラッグドロップした後は、離している状態のupになってくれず、押さずに動かしても#chrはついてきてしまいます。まともなドラッグドロップと違い、もう1回クリックでやっと離してくれる、という具合です。
#chr上でボタンを離している時はそれを検出するんじゃないのか?と思ってしまうのですが、ついでに、ドラッグ動作自体も、移動禁止マークが出てちょっとおかしいし、詳しい人はどうやってこういう症状を回避してドラッグドロップの動作を実現しているのでしょうか?
ネットで見て回って参考にしようにも、短くてシンプルなjQueryのドラッグドロップのサンプルが見つからず、ここで何が間違いなのか意見を仰ごうと思ったものです。手っ取り早くjQueryUIを導入すれば、やりたいこと自体は出来るんでしょうけど、ボタン離していても検出できないのが何なのかは、すっきりしておきたいと思いました。どうかよろしくお願いします。
No.1ベストアンサー
- 回答日時:
この手のことをやったことはありませんが、興味があったので試してみました。
スクリプトとは関係なしに、ブラウザ側の機能として表示中の要素をドラッグしようとすると移動禁止マークが出るように、ドラッグに対しての反応が組み込まれているようです。
>ドラッグ動作自体も、移動禁止マークが出てちょっとおかしいし、~
上記のブラウザ側の処理が働いていると想像します。
これをキャンセルしておかないとドラッグ&ドロップの制御はうまくいかないようですね。キャンセルするには、イベントの伝搬を止めておけばよさそうです。
というわけで、こんな感じ?
(クリックした位置が変わらないように、少しロジックを変えています)
(全角空白は半角に)
<!DOCTYPE html>
<html lang="ja">
<head>Sample</head>
<style>
#chr{ position:absolute; left:100px; top:100px; }
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11 …
<script type="text/javascript">
(function(){
var drag = { flag:false };
$(document).mousedown(function(e){
if($(e.target).parent().attr("id")!="chr") return;
var o = $("#chr").offset();
drag.deff = { x:o.left - e.pageX, y:o.top - e.pageY };
drag.flag = true;
e.preventDefault();
}).mousemove(function(e){
if(!drag.flag) return;
$("#chr").css({top: e.pageY + drag.deff.y, left: e.pageX + drag.deff.x});
e.preventDefault();
}).mouseup(function(){
drag.flag = false;
});
})();
</script>
</head>
<body>
<div id="msg"></div>
<div id="chr">
<img src="parts/usl470.jpg">
</div>
</body>
</html>
参考URL:http://api.jquery.com/event.preventDefault/
犯人は、ブラウザのデフォルト動作だったんですか。
それにしても、すごい!!
クリックした位置まで変わらないようにしてるのに、こんなに短く実現できるんですね。
デフォルトの動作を抑止するevent.preventDefaultの使い方といい、
恥ずかしながら、知らない技法がいっぱいです。
シンプルなのに学ぶことの多いお手本です。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jQueryで特定id以外の下にある...
-
折りたたみタグ 他を閉じる(...
-
ラジオボタンの切替で表示する...
-
xmlの同一要素名を配列に入れる...
-
JQueryタブの切替 タブからタ...
-
innerHTMLに入れたリンクが反応...
-
displayの状態を取得したい
-
document.all.id1.innerText="ok";
-
JavaScript オンマウスで画像...
-
複数のリンク画像を一定時間で...
-
10秒後に1秒ごとに1行づつ表示...
-
[急ぎ] videoタグで埋め込んだm...
-
読み込んだQRコードをフォーム...
-
クリックすると隠れたテキスト...
-
jqueryを使って無駄なspanタグ...
-
JavascriptでDIV~DIVをリロードで
-
クリックで特定のdiv要素が表示...
-
MAX関数を使ってからLEFT JOIN...
-
classList で、class名が付かな...
-
lightbox 誤作動 JAVA
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
指定したパスが現URLに含まれて...
-
removeEventListenerについて
-
iframe内のリンクが飛ばないの...
-
createElementで作成した要素を...
-
IFRAMEの表示/非表示を切り替え...
-
jQueryで同じ要素の先頭へ親要...
-
ページ読み込み完了の3秒後にリ...
-
jQueryで特定id以外の下にある...
-
jQueryで同じid属性が複数あっ...
-
表示・非表示のスクリプトで、...
-
jQueryでシンプルドラッグドロ...
-
Gif画像のアニメーションが再生...
-
【HP作成】クリックすると下...
-
クリックすると下に説明文が出...
-
背景色を透明化
-
プルダウンとチェックボックス...
-
javascriptでpostした値が取得...
おすすめ情報