-1

質問する前に、問題のあるコードを次に示します。

var coords = dojo.coords(g);
g.style.left = coords.x + "px";
g.style.top = coords.y + "px";
g.style.position = "absolute";

ここで、70 の位置と 30 の位置をg持つ相対的に配置された要素であると想像してください。上記のコードの最後の行をコメントアウトすると、それが表示されます。しかし、最後の行を追加するとすぐに、要素が絶対配置された場合の位置である 18の位置が返されます。への呼び出しは、その下のコードの影響を受けるべきではないように思えますが、そうです。xydojo.coords(g)dojo.coords(g)xdojo.coords()

dojo.require()また、ロードしている関数呼び出しの直前に呼び出すと、その特定の関数に対して未定義のエラーが発生するという同じ問題も見られます。

私は Firefox 3 でテストしていますが、Safari 3 でも同様の問題に気づいています。何かアイデアはありますか?

4

3 に答える 3

1

これはDojoの癖ではなく、ブラウザの動作方法です。基本的に、DOMが変更を反映して要素を再配置したり、レイアウトを変更したりするのに時間がかかる場合があります。だからあなたはあなたが見ているものを見るのです。

別の理由は、要素の親にある可能性があります。dojo.coords()は、ビューポートを基準にした位置を返します。2番目の値として「true」を渡すと、ドキュメントルートを基準にした位置が返されます。上/左を直接割り当て、位置を「絶対」に変更すると、要素が親(絶対、相対、または固定)に配置されている場合は親に対して、またはドキュメントルートに対して相対的に配置されます。微妙な違いですが、人を噛むこともあります。関連する参照:ブロックを含むMSDN:位置属性Google doctype:位置

PS:個人的には、ブラウザの癖を回避するために正しいことができることを期待して、Dojoを使用して左/上を設定し、最初に位置を設定します。

var coords = dojo.coords(g);
g.style.position = "absolute";
dojo.marginBox(g, {l: coords.x, t: coords.y});
于 2008-11-24T04:47:19.130 に答える
0

なぜこれが機能するのかを誰かに説明してもらいたいのですが、解決策は次のとおりです。

var coords = dojo.coords(g);
g.style.left = coords.x + "px";
g.style.top = coords.y + "px";
setTimeout(function(h) {
    h.style.position = "absolute";
}, 0, g);

乾杯

于 2008-11-17T19:03:50.667 に答える
-1

あなたの質問に答えなくて申し訳ありませんが、(私は道場を知らないので) coords.x と coords.y が文字列を返さない限り、あなたの関数にはエラーがあります.

g.style.left = coords.x + "px";

g.style.top = coords.y + "px";

スタイルには常に文字列を渡す必要があるため、これらも追加します。

g.style.left = parseInt(coords.x) + "px";
g.style.top = parseInt(coords.y) + "px";

この種のエラーに頭が回転する回数に驚かれることでしょう。答えについては、申し訳ありませんが、私はあなたを助けることができません。

幸運を!

編集:

ああ、私が理解できれば、私は今あなたを助けることができます.. まあ、私は道場を知らないので、あなたが望むことをする同様のJavaScriptをあなたに指摘することができます.

g.offsetTop

g.offsetLeft 

要素の位置からの座標が得られます。それらを試してみて、それが機能するかどうかを確認してください..

于 2008-11-17T14:46:58.830 に答える