お世話になります。
javascriptを使用して、<div>で作られた複数のオブジェクトが重なったかどうかを判定したいのです。
果たして、そんなことは可能なのでしょうか。
<body>
<div id="block1" style="background:#F00; width:200px; height:200px; marglin-left:200px;" onclick="javascript=aaa();"></div>
<div id="block2" style="background:#0F0; width:200px; height:200px; margin-left:200px;"></div>
<div id="block3" style="background:#0F0; width:200px; height:200px; margin-left:600px;"></div>
<div id="block4" style="background:#0F0; width:200px; height:200px; margin-left:800px;"></div>
<div id="block5" style="background:#0F0; width:200px; height:200px; margin-left:1200px;"></div>
<div id="block6" style="background:#0F0; width:200px; height:200px; margin-left:2000px;"></div>
</body>
<script>
fucntion aaa(){
var bbb = document.getElementById("block1");
var move= parseFloat(bbb.style.left);
bbb.style.left = (move+10)+"px";
}
</script>
というのがあったとして、block1がblock2、block3・・・・のいずれかと重なった瞬間にalertか何かで「重なりました!」という感じで表示することはできないのでしょうか。javascript オブジェクト 重なり とかで検索しても、目的のものが出てこなかったので…
どうぞ、よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
JavaScriptでですか?……jQueryの方がいいとは思いますが……
出来ないことはないとは思います
未検証の回答なので以下注意して検証して下さい
おおまかな流れとしては
1.body内のオブジェクトを全て取得する
2.オブジェクトから取得する情報は位置情報(x,y)と縦横サイズ(w,h)
3.配列に放り込み、新しい要素を取得する度に既にある要素の
x <= newX && (x+w) >= newX && y <= newY && (y+h) >= newY
を比較して重なりを検出する
// BODY エレメントを取得
var element = document.body;
for(i=0;i <element.length;i++){
x = element.elements[i].offsetLeft;
y = element.elements[i].offsetTop;
w = element.elements[i].offsetWidth;
h = element.elements[i].offsetHeight;
}
後はトリガーはどうするのかが分からないのですが
クリック時とかならまだいいのですが、随時更新は流石にjQueryを勉強したほうが良いと思います
CyberCypher 様
お返事ありがとうございます!
jqueryを使用することができないので、昨日から頭をひねっておりまして、すごく助かります!
なるほど、一度配列に保管しておくのですね。その方法でさっそく実験に取り掛かりたいと思います!
ありがとうございました。
No.2
- 回答日時:
typoがひどすぎ、質問アップする前に一度見直した方がよい。
>重なった瞬間
文法的におかしいのでなんとも言えませんが、
block1を右に10pxずつ移動していって重なりをチェックしたいということでしょうか?
見る限りblock1を右にどれだけ移動しても重ならないように見えますが?
それともマージンの数値が一致したらアラートをだしたいだけなのでしょうか?
汚い書き方をお許しください。
例として抜粋したものを書いたもので、申し訳ありません。
typeのところは私の記述ミスでした。
>block1を右に10pxずつ移動していって重なりをチェックしたいということでしょうか?
>見る限りblock1を右にどれだけ移動しても重ならないように見えますが?
>それともマージンの数値が一致したらアラートをだしたいだけなのでしょうか?
こちらの方法で問題ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptテキストBOX色を元に...
-
テキストエリア内の一部の文字...
-
HTMLタグに複数のクラスを設定...
-
createElementが一瞬で消えてし...
-
MAX関数を使ってからLEFT JOIN...
-
読み込んだQRコードをフォーム...
-
マウスを乗せるとメニュー表示
-
変数名をどのようにつけるのが...
-
removeEventListenerについて
-
jqueryを使って無駄なspanタグ...
-
外部ページからハッシュタグ(...
-
フッターの下に隙間ができてしまう
-
HTMLですCSSです この画像のよ...
-
背景色と連動するスライドショ...
-
スライドショー「Skitter」をカ...
-
1枚の画像をクリックすると複数...
-
web制作(HP作成について教えて...
-
textareaに画像を表示したい
-
スワップイメージのフェード方...
-
アコーディオンメニューが開い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
HTMLタグに複数のクラスを設定...
-
変数名をどのようにつけるのが...
-
401エラードキュメントを401.ht...
-
javascriptテキストBOX色を元に...
-
読み込んだQRコードをフォーム...
-
タブで開いてさらにタブ内をア...
-
createElementで作成した要素を...
-
removeEventListenerについて
-
表示・非表示のスクリプトで、...
-
HTMLとJavaScriptで作ったタイ...
-
HTMLとJavaScriptで作ったタイ...
-
getElementByIdの戻り値がnull...
-
指定したパスが現URLに含まれて...
-
[急ぎ] videoタグで埋め込んだm...
-
IFRAMEの表示/非表示を切り替え...
-
iframe内のリンクが飛ばないの...
-
removeAttribute()メソッドで削...
-
背景色を透明化
-
jQueryで同じid属性が複数あっ...
おすすめ情報