
こちらでは初めて質問させていただきます。
よろしくお願いします。
現在、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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascript 引用符
-
dojo(ライブラリ)のカレンダ...
-
iframe内cssの切り替えが出来ない
-
jqueryについて質問させてくだ...
-
Camera slideshowの使い方について
-
jqueryでのkeydownイベント発生...
-
マウスオーバーでリンク先サム...
-
base64encodeでの文字化けについて
-
マスターページでのJavaScriopt...
-
<div>のタッチ状態を維持したま...
-
<a href="#" …>の意味を教えて...
-
テキストボックス内にハイパー...
-
子フレームの自動リロードは可...
-
設問をいくつか答えてその答え...
-
CGI検索エンジンをHTMLに
-
Jquery.PHPファイルのechoが表...
-
javascriptとApacheの設定
-
ウィンドウのタイトルを変えたい
-
マウスが画像の上に来たとき音...
-
「関数が定義されていない」と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サイトにアクセスした際、数秒...
-
<div>のタッチ状態を維持したま...
-
base64encodeでの文字化けについて
-
jquery ui.resizable 使い方
-
jQuery UIのdraggableについて
-
jqueryについて質問させてくだ...
-
重複する数字のカウントの仕方
-
Camera slideshowの使い方について
-
Lightboxがエラーになります。
-
jqueryについて(Lightboxとbxs...
-
よろしくお願いします。
-
JW Playerの"file"にURLに付け...
-
jQuery.lightpop.jsの動作について
-
crossSlideがうまく機能しない...
-
map とlightbox
-
Jqueryの干渉について
-
マスターページでのJavaScriopt...
-
マウスオーバーでリンク先サム...
-
SVGのmask要素について
-
jqueryのcolorboxを読込直後に...
おすすめ情報