HOME > > > > >

.offset()

戻り値

Object
top、leftプロパティをもつオブジェクト。

jQueryオブジェクトが持つ最初のDOM要素(indexが0のもの)のDocumentからの位置を取得する。

サンプル

実行結果

Javascript

  1. $('.jqTest .execute').toggle(function(){
  2.     $(this).val('End');
  3.     $('body').bind('click.jqTest', function(e){
  4.         $(e.target).css({ border: '2px solid #990000'});
  5.         alert('left:' + $(e.target).offset().left + ' | top:' + $(e.target).offset().top);
  6.     });
  7. }, function(){
  8.     $('body').unbind('.jqTest');
  9.     $(this).val('Start');
  10. });
  11.  

HTML

  1. <div class="jqTest">
  2.     <input type="button" value="Start" class="execute cq-btn m-primary" />
  3. </div>

offset()は非表示要素は取得できない。公式ではbodyに設定されたborder、padding、marginは考慮されないっぽい雰囲気のことが書いてあるけど border以外は考慮されるみたい。ちゃんと空気読めてないかも。@todo で。

サンプル

実行結果

Javascript

  1. $('.jqTest2 .execute').toggle(function(){
  2.     $(this).val('End');
  3.     $('body').css({
  4.         border: '50px solid #000000',
  5.         padding: '50px',
  6.         margin: '50px'
  7.     });
  8.  
  9.     $('body').bind('click.jqTest2', function(e){
  10.         $(e.target).css({ border: '2px solid #990000'});
  11.         alert('left:' + $(e.target).offset().left + ' | top:' + $(e.target).offset().top);
  12.     });
  13. }, function(){
  14.     $('body').unbind('.jqTest2');
  15.     $(this).val('Start');
  16. });

HTML

  1. <div class="jqTest2">
  2.     <input type="button" value="Start" class="execute" />
  3. </div>

.offset( coordinates )

引数

(object)coordinates
top、leftプロパティをもつオブジェクト。

jQueryオブジェクトが持つDOM要素にcoordinatesを設定できる。

サンプル

実行結果

Javascript

  1. $('.jqTest3 .execute').toggle(function(){
  2.     $(this).val('End');
  3.  
  4.     $('body').bind('click.jqTest3', function(e){
  5.         $(e.target).offset({left: 20, top: 20});
  6.     });
  7. }, function(){
  8.     $('body').unbind('.jqTest3');
  9.     $(this).val('Start');
  10. });

HTML

  1. <div class="jqTest3">
  2.     <input type="button" value="Start" class="execute" />
  3. </div>

.offset( function(index, coords) )

引数

(int)index
インデックス
(object)coords
top、leftプロパティをもつオブジェクト。

関数を渡して設定することもできる。

サンプル

Startクリック後、このページの要素をクリックすると20pxずつ移動する。

実行結果

Javascript

  1. $('.jqTest4 .execute').toggle(function(){
  2.     $(this).val('End');
  3.  
  4.     $('body').bind('click.jqTest4', function(e){
  5.         $(e.target).offset(function(index, coords){
  6.             if ($(this).data('coods')) {
  7.                 $(this).addClass('jqTest4Active');
  8.             } else {
  9.                 $(this).addClass('jqTest4Active').data('coods', coords);
  10.             }
  11.             return {left: coords.left + 20, top: coords.top + 20}
  12.         });
  13.     });
  14. }, function(){
  15.     $('.jqTest4Active').offset(function(index, coords){
  16.         $(this).removeClass('jqTest4Active');
  17.         return {left: $(this).data('coods').left, top: $(this).data('coods').top}
  18.     });
  19.  
  20.     $('body').unbind('.jqTest4');
  21.     $(this).val('Start');
  22. });

HTML

  1. <div class="jqTest4">
  2.     <input type="button" value="Start" class="execute" />
  3. </div>