Элемент позиции jQuery рядом друг с другом по мыши - с фиксацией прокручиваемого div

Итак, я поиграл с этим jsFiddle of mouseover вместе с абсолютными позиционирующими divs

Результат нежелателен. Код основан на jquery, как позиционировать один элемент относительно другого Но код работает не так, как ожидалось. Я могу понять, как изменить положение смещения в зависимости от абсолютного позиционирования (например, смещение субстрата заголовка). Но у меня проблемы с позиционированием прокрутки. Как только вы начинаете прокрутку, позиция неверна. Кто-нибудь знает его решение?

Ответ 1

Ненавижу отвечать на мои собственные вопросы, но смотрите здесь: рабочее решение с jquery

в основном проблема заключалась в том, что элемент был вставлен в неправильном месте. Смещение каким-то образом не соответствовало правильной странице с полосами прокрутки. Это можно устранить, добавив элемент в родительскую форму (если вы хотите, например, сделать некоторые кнопки видимыми). Или <body>

Он также устраняет проблему с перекрывающимися элементами, которые у меня были. Представьте себе, что у вас есть фиксированный позиционированный элемент E1 и абсолютный позиционированный элемент E2. Одним из них является левое меню, E2 - это контент. Когда вы хотите сделать видимым/показать элемент, когда вы наводите курсор мыши на, например, div в содержимом E2 и хотите, чтобы он перекрывался над левым меню E1, тогда вам нужно убедиться, что div не находится в содержимом, так как кажется, что вы не можете пересекаться с дочерним элементом E2, который установлен фиксированным.

Ответ 2

По какой-то причине значение offset().top изменяется в jQuery при прокрутке документа. Вместо этого просто используйте стандартные свойства HTML-элемента offsetLeft и offsetTop:

Рабочий пример: http://jsfiddle.net/YpcSe/2/

код:

$("#m1").mouseover( function(){
    $("#o1").css({ "left": this.offsetLeft, "top":this.offsetTop }).show();
})
.mouseout( function(){
    $("#o1").hide();
});



$("#m2").mouseover( function(){
   $("#o2").css({ "left": this.offsetLeft, "top":this.offsetTop }).show();
})
.mouseout( function(){
    $("#o2").hide();
});