粘贴侧边栏仅在侧边栏底部位于窗口底部时粘住
我有一个2列布局。 左栏比侧栏长。 我希望侧边栏仅在其底部到达浏览器窗口底部时粘住。 因此,当右侧边栏粘住时,用户可以继续向下滚动左列内容。 我在这里看到了很多棘手的问题,但是这种特殊情况仍然让我感到困惑。 我在左栏上也有一个粘贴的标题栏,我已经成功地坚持了下来。
这是我在jsfiddle中所做的一个演示!
这里是我正在尝试的js的快速浏览。
$(function(){ var headlineBarPos = $('.headlineBar').offset().top; // returns number var sidebarHeight = $('.sticky-sidebar-wrap').height(); var sidebarTop = $('.sticky-sidebar-wrap').offset().top; var windowHeight = $(window).height(); var totalHeight = sidebarHeight + sidebarTop; $(window).scroll(function(){ // scroll event var windowTop = $(window).scrollTop(); // returns number // fixing the headline bar if (headlineBarPos < windowTop) { $('.headlineBar').addClass('sticky').css('top', '0'); } else { $('.headlineBar').removeClass('sticky').removeAttr('style'); } if(sidebarHeight < windowTop) { $('.sticky-sidebar-wrap').addClass('sticky').css('top', '0'); } else { $('.sticky-sidebar-wrap').removeClass('sticky').removeAttr('style'); } console.log(windowTop); }); console.log(headlineBarPos); console.log(sidebarHeight); console.log(sidebarTop); });
我希望我做对了,当侧边栏的底部进入视图,然后坚持?
我在侧边栏的底部(侧边栏内)创建了另一个div。 当它出现时,它会坚持下去。
//inside the sidebar
并在js
$(function () { var headlineBarPos = $('.headlineBar').offset().top; // returns number var moduleControllerPos = $('.moduleController').offset().top; // returns number var sidebarHeight = $('.sticky-sidebar-wrap').height(); var sidebarTop = $('.sticky-sidebar-wrap').offset().top; var windowHeight = $(window).height(); var totalHeight = sidebarHeight + sidebarTop; $(window).scroll(function () { // scroll event var windowTop = $(window).scrollTop(); // returns number // fixing the headline bar if (headlineBarPos < windowTop) { $('.headlineBar').addClass('sticky').css('top', '0'); } else { $('.headlineBar').removeClass('sticky').removeAttr('style'); } if (moduleControllerPos < windowTop + windowHeight) { $('.sticky-sidebar-wrap').addClass('sticky').css('top', '0'); } else { $('.sticky-sidebar-wrap').removeClass('sticky').removeAttr('style'); } console.log(windowTop); }); console.log(headlineBarPos); console.log(sidebarHeight); console.log(sidebarTop);
});
我希望它有所帮助。
就像是:
if (sidebar.top + sidebar.height < window.scrolltop + window.height) { // set sticky }
并设置粘性需要考虑侧边栏可能高于视口,因此:
sidebar.top = sidebar.height - window.height // this will be a negative number