2016年3月7日月曜日

(jQueryの学習)CSS:相対位置を操作する/offsetメソッド/左上からの要素の相対位置を取得する(その3)

前回の続きで、
「複数要素」に対する左上からの相対位置を取得する方法を考えます。

1-3.offsetメソッドとmapメソッドで複数要素の幅を取得する(できるか?)
複数要素の左上からの相対位置は取得できませんでしたが、
heightメソッドやwidthメソッドと同じように「mapメソッド【返却値(jQueryオブジェクト)=要素.map(function)】」を利用することで、
複数要素の左上からの相対位置をまとめて取得できるか?試してみます。

実際に動かしてみると、以下のようになった。
サンプルソース
// HTML
<input type="button" value="ボタンを押すと、指定した要素の左上からの相対位置が表示されます"><br>
<div class="box">
  <div class="box"><b>テストエリア1</b><div class="box-css-test-area-1">・・・略・・・</div></div>
  <div class="box"><b>テストエリア2</b><div class="box-css-test-area-2">・・・略・・・</div></div>
</div>

// CSS
/* テストエリア1 */
.box-css-test-area-1 {background:#F5EEFF; border:5px solid #88f; padding:10px; margin:20px; height:40px; width:460px;}
/* テストエリア2 */
.box-css-test-area-2 {background:#F5EEFF; border:5px solid #88f; padding:20px; margin:10px; height:30px; width:450px;}

// jQuery
$(function() {
  $("input[type=button]").click(function(){
    // サンプル:「テストエリア1と2」の左上からの相対位置を取得する
    var of = $(".box-css-test-area-1, .box-css-test-area-2").map(getOffset).get();
    // ↑:getOffsetで各要素の左上からの相対位置を取得し、その結果をオブジェクトに格納する
    for (var key in of) {
      // ループして各要素の相対位置を取り出す
      alert("左から[" + of[key].left + "] 上から[" + of[key].top + "]");
    }
  });
});

// JavaScript
function getOffset(index, el){
    // 【構文】返却値(objectオブジェクト) = 要素.offset()
  return $(el).width();
}
実装例
テストエリア1とテストエリア2の左上からの相対位置を取得します。

要素:テストエリア1とテストエリア2

テストエリア1
border:5px; padding:10px; margin:20px; height:40px; width:460px;
(境界線:5px、枠内余白:10px、枠外余白:20px、高さ:40px、幅:460px)
テストエリア2
border:5px; padding:20px; margin:10px; height:30px; width:450px;
(境界線:5px、枠内余白:20px、枠外余白:10px、高さ:30px、幅:450px)

mapメソッドを利用することで
「複数要素」に対する左上からの相対位置が
まとめて取得できることがわかりました。

いかがでしたか?
次回は「2.左上からの要素の相対位置を設定する」を学びます。

それでは、また。

Previous Post
Next Post

post written by: