【发布时间】:2016-10-12 21:07:45
【问题描述】:
我有一个.SideNav 来浏览我的网站,.Main 这是页面的内容。 .SideNav 是一个手风琴,因此它可以扩展到比 .Main 内容更大的高度,反之亦然。
我想要实现的是当你在页面上滚动时;
IF .SideNav < $(document).height() - .SideNav 是固定的,.Main 可以正常滚动。
IF .SideNav < $(document).height() - .SideNav 将在您滚动到并因此大于$(document).height() 时变为固定,而.Main 正常滚动。但是,当您开始向上滚动时,.SideNav 将能够滚动到顶部位置,并在顶部可见时再次固定。
结合所有页面滚动方法以及跨浏览器兼容性;
- 滚动条
-
键盘
- 向上/向下键
- 向上/向下翻页键
-
鼠标
- 鼠标滚轮
- 鼠标滚轮 - 单击并拖动
我一直在 StackOverflow 上浏览多个问题和答案,这些问题和答案非常有用,例如我当前的滚动方向检测,但是当您单击鼠标滚轮时这不起作用并且我无法解决我的主要问题。
到目前为止我的代码:
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
});
}
}
});
});
【问题讨论】:
标签: javascript jquery