根据滚动位置固定切换位置
我有以下代码修复菜单的位置,它将滚动到页面顶部。
$(function () { var msie6 = $.browser == 'msie' && $.browser.version = top) { $('.menu').addClass('fixed'); } else { $('.menu').removeClass('fixed'); } }); } });
CSS
.container { width:400px; margin:auto; } .header { background-color:#096; height:150px; } .fixed { position:fixed; top:0px; left:50%; margin-left:50px; } .bodyContainer { overflow:hidden; } .menu { float:right; width:150px; height:250px; background-color:#F00; } .bodyCopy { float:left; width:250px; height:1000px; } .footer { background-color:#096; height:250px; }
HTML
Test Header
test
我现在想要做的是当用户到达页面底部时让它再次开始滚动(这样它就不会覆盖页面中的页脚)。
在这里jsfiddle …
var top = $('.menu').offset().top - parseFloat($('.menu').css('margin-top').replace(/auto/, 0)); var _height = $('.menu').height(); $(window).scroll(function(event) { var y = $(this).scrollTop(); var z = $('.footer').offset().top; if (y >= top && (y+_height) < z) { $('.menu').addClass('fixed'); } else { $('.menu').removeClass('fixed'); } });
http://jsfiddle.net/AlienWebguy/CV3UA/1/
如果您希望菜单在到达页脚时保持原样,您需要添加更多逻辑以将其附加到DOM中:
var msie6 = $.browser == 'msie' && $.browser.version < 7; if (!msie6) { var top = $('.menu').offset().top - parseFloat($('.menu').css('margin-top').replace(/auto/, 0)); var _height = $('.menu').height(); var _original_top = $('.menu').offset().top; $(window).scroll(function(event) { var y = $(this).scrollTop(); var z = $('.footer').offset().top; if (y >= top && (y + _height) < z) { $('.menu').insertBefore($('.bodyCopy')).removeClass('stuck-bottom').addClass('fixed'); } else { if ((y + _height) >= z) { $('#menu').insertBefore($('.footer')).removeClass('fixed').addClass('stuck-bottom'); } else $('.menu').insertBefore($('.bodyCopy')).removeClass('stuck-bottom').removeClass('fixed'); } }); }
我确信有更优雅的方式来做到这一点。 玩耍:) http://jsfiddle.net/AlienWebguy/CV3UA/2/
这是css3的新方法。
使用position:sticky
跟随滚动。
这是文章解释。
http://updates.html5rocks.com/2012/08/Stick-your-landings-position-sticky-lands-in-WebKit
这个演示的老方法
与粘性位置演示