Vous pouvez tester si un élément de menu est Offscreen avec la fonction suivante:
/*--- function bIsNodeClippedOrOffscreen returns true if a node
is offscreen (without scrolling).
Requires jQuery.
*/
function bIsNodeClippedOrOffscreen (zJnode)
{
var aDivPos = zJnode.offset();
var iLeftPos = aDivPos.left;
var iTopPos = aDivPos.top;
var iDivWidth = zJnode.outerWidth (true);
var iDivHeight = zJnode.outerHeight (true);
var bOffScreen = CheckIfPointIsOffScreen (iLeftPos, iTopPos);
var bClipped = CheckIfPointIsOffScreen (iLeftPos + iDivWidth, iTopPos + iDivHeight);
return (bOffScreen || bClipped);
}
function CheckIfPointIsOffScreen (iLeftPos, iTopPos)
{
var iBrowserWidth = $(window).width() - 16; //-- 16 is fudge for scrollbars, refine later
var iBrowserHeight = $(window).height() - 16; //-- 16 is fudge for scrollbars, refine later
var bOffScreen = false;
if (iLeftPos < 0 || iLeftPos >= iBrowserWidth)
bOffScreen = true;
if (iTopPos < 0 || iTopPos >= iBrowserHeight)
bOffScreen = true;
return bOffScreen;
}
.
Exemple d'utilisation:
<li id="SomeMenuItem"> Get your shopping cart for free!
...
...
var Node = $("#SomeMenuItem");
var NeedToMoveIt = bIsNodeClippedOrOffscreen (Node);
Ron, je ne vais pas écrire une grande réponse, mais assurez-vous que tout ce que vous réglez sur les comptes pour le cas où quelqu'un ouvre votre page déjà défilée (ie via une ancre, ou leur navigateur "se souvenant" du précédent position). Cela étant dit, l'utilitaire Position de jQuery UI peut être ce que vous voulez. Il gère les «collisions» du type qui vous inquiète. – Ryley