我正在使用以下 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() 无济于事。任何提示表示赞赏。谢谢。