:私はこのイベントハンドラの外にまったく同じコードを貼り付けるときに今jQueryのスコープの混乱
$(document).ready(){
// Handles the triangle image sprite for the top navigation
$('#topnav a')
.on({
mouseenter: function() {
var pos = $("#topnav a.active-top").offset();
console.log("Top: " + pos.top + " Left: " + pos.left);
// Get the position of the current hovered "a" element
var upSprite = $("#upArrow").show(),
pos = $(this).offset(),
aWidth = $(this).width(),
offsetTop = 27, // Adjust this to raise or lower the sprite
offsetLeft = aWidth/2; // Centers the element under the link
upSprite
.css({
"top": pos.top + offsetTop,
"left": pos.left + offsetLeft
});
//console.log("Top: " + pos.top + " Left: " + pos.left);
},
mouseleave: function() {
// Hide the arrow once the mouse leaves
$('#upArrow').hide();
}
});
}
$(document).ready(function() {
var pos = $("#topnav a.active-top").offset();
console.log("Top: " + pos.top + " Left: " + pos.left);
}
私はpos.leftの完全な異なる値を取得します。
私が理解しているように、offset()はドキュメントの相対位置を与えるべきであり、親コンテナに対する相対位置を与える.position()とは異なります。
コードが.on()イベントハンドラのスコープ内にあるとき、別の種類のコンテキストにコードが供給されていますか?私は無駄に$ .proxy()を使ってみました。任意のヒントが評価されます。ありがとう。
ああ、画像がロードされた後にoffset()が確実に行われるようにする方法がありますか?私はタイムアウトを設定することを考えていたが、それは非常に信頼できない可能性がある。 – ChrisC
イメージを待つ$(window).load()を使って問題を解決できました。ありがとう! – ChrisC