2011-09-13 6 views
1

マイDNNモジュールには、クリックするとサブメニューが表示される画像ボタンがいくつかあります。メニューの絶対位置は、期待どおりjavascriptを使用して計算されます。これまではうまくいきました(DNN4とDNN5では)。しかし、私たちはDNN6の問題に気付いています。メニュー位置は、かなりの数のピクセル(おそらく数百)によってオフになっています。 私は計算コードを書いていないので、JSの専門家でもないので、DNN6がどのように影響しているのか理解できません。 - スキンを変更すると任意の違いはありませんでしたので、私はこのコードが親ページの構造によって影響を受けることができる方法を理解したいと思いますDNN 6でメニュー位置が乱れる

function AbsolutePosition(obj) { 
     var pos = null; 
     if(obj != null) { 
      pos = new Object(); 
      pos.top = obj.offsetTop; 
      pos.left = obj.offsetLeft; 
      pos.width = obj.offsetWidth; 
      pos.height= obj.offsetHeight; 
      obj = obj.offsetParent; 
      while(obj != null) { 
       pos.top += obj.offsetTop; 
       pos.left += obj.offsetLeft; 
       obj = obj.offsetParent; 
      } 
     } 
return(pos); 
} 

: はこちら機能です。これは、ページ要素の構成方法と関係があります。

編集:また、私が試すことができるコードの変更に関する提案を探しています。

ありがとう。

答えて

4

これは、絶対配置がどのように機能するかと関係があります。要素が絶対的に配置されている場合、その位置(topと上記のコードのleft要素によって示されます)は、のいずれかの最も近い祖先を基準にして、relativeまたはabsoluteのいずれかです。 DNN 6では、モジュールラッパーにはposition: relativeが指定されています(新しいアクションメニューは位置決めに使用されます)。新しいコントロールパネルにも同様の変更が加えられます(メニューがモジュール内にない場合)。要素の位置は、absoluterelativeであれば

あなたは木に登っ停止し、このスクリプトを、試してみてください:

function AbsolutePosition(obj) { 
    if (!obj) { 
     return null; 
    } 

    var pos = { 
     top: obj.offsetTop, 
     left: obj.offsetLeft, 
     width: obj.offsetWidth, 
     height: obj.offsetHeight 
    }, 
    positionsToStopAt = { 
     relative: true, 
     absolute: true 
    }; 

    obj = obj.offsetParent; 
    while(obj && !positionsToStopAt[jQuery(obj).css('position')]) { 
     pos.top += obj.offsetTop; 
     pos.left += obj.offsetLeft; 
     obj = obj.offsetParent; 
    } 

    return pos; 
} 
+0

感謝!!私はposition:relativeの意味を完全には理解していませんが、試してみることのできるコードの変更をお勧めしますか? – Apeksha

+0

は魅力的に機能します!本当にありがとう! – Apeksha

関連する問題