浮动菜单在到达页面底部之前停止

时间:2009-07-16 03:13:12

标签: javascript jquery scroll

我有一个浮动菜单(绝对定位),当用户向下滚动页面时,它保持在视图中,问题是我有一个相当大的页脚,如果你一直滚动到页面底部它将与页脚。

我只是想让它停止从页面底部说400px ..有谁知道这是否可以做到?

以下是代码:

var name = "#about";  
var menuYloc = null;  

 $(document).ready(function(){  
     menuYloc = parseInt($(name).css("top").substring(0,$(name).css("top").indexOf("px")))  
     $(window).scroll(function () {   
         var offset = menuYloc+$(document).scrollTop()+"px";  
         $(name).animate({top:offset},{duration:500,queue:false});  
     });  
 }); 

提前致谢!

赖安

2 个答案:

答案 0 :(得分:3)

需要计算“页脚”的可见程度,然后将#about放在页脚上方,这样它就不会隐藏它。我认为以下代码应该可以解决问题:

var name = "#about";  
var menuYloc = null;  
var footer = '#yourFooterId'; //Specify the ID for your footer.

 $(document).ready(
    function()
    {  
        menuYloc = parseInt($(name).css("top").substring(0,$(name).css("top").indexOf("px")))  
        $(window).scroll(
            function() 
            {   
                var offset = menuYloc + $(document).scrollTop();
                var anotherOffset = offset;

                var docTop = $(window).scrollTop();
                var footerTop = $(footer).offset().top;

                var maxOffset = footerTop - $(name).height() - 20;
                var minOffset = docTop;

                offset = offset > maxOffset ? maxOffset : offset;
                offset = offset < minOffset ? minOffset : offset;

                $(name).animate({top:offset + 'px'},{duration:500,queue:false});      
            }
        );  
    }
);

编辑1:

修正了上述代码中的错误。它现在应该工作。

编辑2:

更新了演示代码,它应该适用于所有浏览器。 [早期的演示代码有'console.log'调用,如果你不使用Firefox可能会失败]

编辑3:

通过计算最小偏移量确保浮动菜单始终可见。

Check the demo →

Demo Page Code

这就是演示的样子:

红色浮动div将始终保持在页脚上方,而绿色浮动div没有应用此类逻辑。

答案 1 :(得分:1)

尝试这样的事情(未经测试):

var name = "#about";  
var menuYloc = null;  

$(document).ready(function(){
    var menu = $(name);
    menuYloc = parseInt(menu.css("top").substring(0,menu.css("top").indexOf("px")));
    var height = parseInt( menu.attr( 'offsetHeight' ) + ( parseInt( menu.css( 'marginTop' ) ) || 0 ) + ( parseInt( menu.css( 'marginBottom' ) ) || 0 ) );
    var footerYLoc = $('#footer').offset().top;
    $(window).scroll(function () {   
        var offset = menuYloc+$(document).scrollTop();
        if ( (offset + height) >= footerYloc) offset = footerYloc - height;
        menu.animate({top:offset+"px"},{duration:500,queue:false});  
    });


});