次の 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() を使用してみましたが、役に立ちませんでした。どんなヒントでも大歓迎です。ありがとう。