こちらでは初めて質問させていただきます。
よろしくお願いします。
現在、jQuery UI の draggable を使用してWebブラウザ上での
ドラッグ&ドロップを実装中なのですが、
期待通りに動作させることが出来ません。
<script></script> …… (1)
<html>
<head>
<script type="text/javascript" src="jQuery/jquery-1.3.2.js"></script>
<script type="text/javascript" src="jQuery/jquery-ui-1.7.2/development-bundle/ui/ui.core.js"></script>
<script type="text/javascript" src="jQuery/jquery-ui-1.7.2/development-bundle/ui/ui.draggable.js"></script>
<style>
#a { height:100px; width:300px; overflow:scroll; border:solid 1px Black; }
#b { width:60px; height:40px; background:lime; position:absolute; top:10px; left:50px }
#c { width:60px; height:40px; background:lime; position:absolute; top:60px; left:50px }
</style>
<script type="text/javascript">
$j = jQuery.noConflict();
$j(function($) { $('#b').draggable(); });
$j(function($) { $('#c').draggable(); });
</script>
</head>
<body>
<div id="a">
<span id="b">Drag Element1</span>
<span id="c">Drag Element2</span>
</div>
</body>
</html>
ドラッグ対象は複数存在するため、ドラッグ対象を<div>エリア内で
スクロール(必須です)させています。
ドラッグ対象を<div>エリア外にドラッグしたいのですが、
<div>エリア内しかドラッグできません。
((1)の記述がないと、ドラッグ対象が<div>エリア内でスクロール
しませんでした。???)
どなたか、よきアドバイスをお願いします。
No.1ベストアンサー
- 回答日時:
まず<script></script> …… (1)の件ですが、これだけではよくわかりませんが<html>の前にきちんとDOCタイプ宣言をすればよろしいのではないかと。
jQuery UIのdraggableですが、これはdraggableにした要素のcssポジショニングプロパティのtop属性値とleft属性値をセットするだけで、ポジショニングの方法(absoluteとかrelative)までは設定できません。
よって、#b要素と#c要素が素直に#aの中にあれば省略値”position:relative”となって#aに結びつき外に出せません。
ご提示のソースでは、
#b { width:60px; height:40px; background:lime; position:absolute; top:10px; left:50px }
として、明示的に"position:absolute"を指定しているので、#aとの結びつきは無くなり、外にでますが#aの管轄外になるので、#aの中ではスクロールしません。
そこで、ui.droppable.jsのメソッドと併用して、draggableが終わって、
#aの中にdroppableされたら"position:relative”、外なら"position:absolute"
にするようにしてみたら、ほぼうまくいきましたが、いまひとつ動きが変(2回操作するとうまくゆく)です。
改造すればうまくいくかもしれませんが、根本的にやり方を変えた方が簡単なような気がします。
<draggable()とdroppable()を使ったサンプル>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<title>xxx</title>
<link type="text/css" href="./jslib/jqueryUI/development-bundle/themes/base/ui.all.css" rel="stylesheet" />
<script type="text/javascript" src="./jslib/jquery.js"></script>
<script type="text/javascript" src="./jslib/jqueryUI/development-bundle/ui/ui.core.js"></script>
<script type="text/javascript" src="./jslib/jqueryUI/development-bundle/ui/ui.draggable.js"></script>
<script type="text/javascript" src="./jslib/jqueryUI/development-bundle/ui/ui.droppable.js"></script>
<style type="text/css">
#a { height:300px; width:300px; overflow:scroll; border:solid 1px Black; }
#b { width:60px; height:40px; background:lime; position:absolute; top:75px; left:50px }
#c { width:60px; height:40px; background:lime; position:absolute; top:125px; left:50px }
</style>
<script type="text/javascript" charset="utf-8">
window.onload = function () {
$j = jQuery.noConflict();
$j("#b").draggable({
stop: function(event, ui){
$j(this).css({ position:"absolute" });
$j("#a").droppable({
drop: function(event, ui){
$j("#a > .ui-draggable").css({ position:"relative" });
},
out: function(event, ui){
$j("#a > .ui-draggable").css({ position:"absolute" });
}});
}});
$j("#c").draggable({
stop: function(event, ui){
$j(this).css({ position:"absolute" });
$j("#a").droppable({
drop: function(event, ui){
$j("#a > .ui-draggable").css({ position:"relative" });
},
out: function(event, ui){
$j("#a > .ui-draggable").css({ position:"absolute" });
}});
}});
}
</script>
</head>
<body>
<div id="a" >
<span id="b">Drag Element1</span>
<span id="c">Drag Element2</span>
</div>
</body>
この回答への補足
ご回答頂きましてありがとうございます。
早速記述して頂いたサンプルをもとに改造を試みてみます。
ちなみに、「根本的にやり方を変えた方が簡単なような気がします。」
というのは、他の方法(使用言語・TOOL等) 或いは 表現の方法(仕様)のどちらなのでしょうか?
No.2
- 回答日時:
>>「根本的にやり方を変えた方が簡単なような気がします。
」というのは、他の方法(使用言語・TOOL等) 或いは 表現の方法(仕様)のどちらなのでしょうか?
両方です。
TOOLの面からは、Query UI の draggable に無い機能をむりやりもたせるのはどうかと思いました。
表現の方法(仕様)の面からは、何故スクロール<div>エリア外にドラッグしたいのかの理由がわかりませんが、本当に必須機能なのかなあと思いました。
早速のご回答、ありがとうございます。
記述して頂いたサンプルをもとに試行錯誤しております。
ある程度の時間をかけて試みますが、不可能のようであれば
表現の方法(仕様)を再考してみます。
アドバイスありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Base64に変換したHTMLの<script...
-
jQuery UIのdraggableについて
-
音楽再生用jQueryプラグイン「j...
-
複数のjavascriptを使うと動か...
-
<a href="#" …>の意味を教えて...
-
個別にハイパーリンクの色を指...
-
(Javascript)印刷するファイル...
-
JavaScriptからVBScriptの呼び...
-
複数のJavascriptを1つのscrip...
-
JavaScriptでiframeの内容を「...
-
外部ファイル名を変数で指定で...
-
スマホ上で、左右スワイプで次...
-
Vbscriptで自分自身のウィンド...
-
初心者です。あまりに初歩的な...
-
【javascript クロスブラウザ...
-
印刷時に消したいjavascriptがある
-
ブラウザをJavaScriptで最小化…
-
<aタグで変数に文字を代入
-
子フレームの自動リロードは可...
-
pythonのWebスクレイピングでfi...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
base64encodeでの文字化けについて
-
bxslider、画像が3枚以上になる...
-
jqueryを2つ設置した事で片方...
-
サイトにアクセスした際、数秒...
-
複数のjavascriptを使うと動か...
-
プラグイン無しでContactform7...
-
light boxが上手く表示されない
-
jqueryとjavascriptの競合?
-
jQuery.lightpop.jsの動作について
-
マスターページでのJavaScriopt...
-
jquery ui.resizable 使い方
-
画像をランダムにフェードイン
-
CrossSlideのスライドショーが...
-
マウスオーバーでリンク先サム...
-
「jquery.csv2table.js」から生...
-
Lightboxがエラーになります。
-
jqueryについて(Lightboxとbxs...
-
【JQuery】ページトップへ戻る...
-
jquery select要素のdisplay:no...
-
jQueryBlockUIをフレーム内で動...
おすすめ情報