我有.SideNav
导航我的网站和.Main
这是页面的内容。 .SideNav
是一名手风琴家,因此有可能将其扩展到高于.Main
内容的高度,反之亦然。
我想要实现的是当你在页面上滚动时;
IF .SideNav < $(document).height()
- .SideNav
已修复,.Main
可以正常滚动。
滚动到 .SideNav < $(document).height()
- .SideNav
将会固定,因此$(document).height()
会.Main
正常滚动。然而,当您开始向上滚动时,.SideNav
将能够滚动到顶部位置,并在顶部可见时再次固定。
结合所有页面滚动方法以及跨浏览器兼容性;
我一直在浏览StackOverflow上的多个问题和答案,这些问题和资源非常有用,例如我当前的滚动方向检测,但是当你单击鼠标滚轮并且我无法解决我的主要问题时,这不起作用。< / p>
到目前为止我的代码:
jQuery(document).ready(function ($) {
'use strict';
var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel"; //FF doesn't recognize mousewheel as of FF3.x
$(document).bind(mousewheelevt, function(e){
var evt = window.event || e; //equalize event object
evt = evt.originalEvent ? evt.originalEvent : evt; //convert to originalEvent if possible
var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta; //check for detail first, because it is used by Opera and FF
var wh = $(window).height();
var spt = $(document).scrollTop();
var spb = $(document).scrollTop() + wh;
var mainDiv = $('.Main').height() + $('.Main').offset().top;
if(delta > 0) {
console.log('Up');
}
else{
if(mainDiv <= spb) {
console.log('mainDIV: ' + mainDiv + ' spb: ' + spb);
var te = '-' + (mainDiv - wh) + 'px';
$('.Main').css({
'position' : 'fixed',
'top' : te
});
}
}
});
});
答案 0 :(得分:1)
var scrollPosSetup = function(){
var mainHeaderHeight = $('.hero').outerHeight() + 100;
var footerHeight = $('footer').outerHeight() + $('.logo-bar').outerHeight() + 240;
var footerScrollPos = $('html').height() - (footerHeight + sidebarWrapperHeight);
var rightSide = (window.innerWidth < 961) ? '30px' : '10%';
if (window.innerWidth > 767) {
if($(document).scrollTop() > mainHeaderHeight &&
$(document).scrollTop() < footerScrollPos) {
$contactContainer.css({
'position' : 'fixed',
'top' : '0px',
'right' : rightSide
});
} else if ($(document).scrollTop() >= footerScrollPos ) {
$contactContainer.css({
'position' : 'relative',
'top' : footerScrollPos - 500,
'right' : ''
});
} else {
$contactContainer.css({
'position' : 'relative',
'top' : '',
'right' : '',
'bottom' : ''
});
}
}
};
$(window).scroll(function ( e ) {
scrollPosSetup();
});