您可以使用以下代码捕获鼠标的滚动事件:
var mouseWheelEvent = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel"; //FF doesn't recognize mousewheel as of FF3.x
if (document.attachEvent) { //if IE (and Opera depending on user setting)
document.attachEvent("on"+mouseWheelEvent, mouseWheelEventHandler);
} else if (document.addEventListener) { //WC3 browsers
document.addEventListener(mouseWheelEvent, mouseWheelEventHandler, false);
}
此后,即使您已到达文档末尾,也很容易看到有人滚动。
这mouseWheelEventHandler
是我传递来处理你的函数mouseWheelEvent
对你来说,它看起来像这样:
function mouseWheelEventHandler(e)
{
if( !sidebar.hasClass('scrollable') && !sidebar.is(":hover") ) {
return true;
}
var event = window.event || e; //equalize event object
var delta = event.detail ? event.detail*(-120) : event.wheelDelta; //check for detail first so Opera uses that instead of wheelDelta
sidebar.scrollTop(sidebar.scrollTop()-delta);
}
仅当侧边栏具有可滚动类并且您尚未将鼠标放在侧边栏上时,它才会滚动侧边栏,因为无论如何它都会滚动该元素,并且您将向上滚动它。
根据以下链接,这应该适用于大多数浏览器:http://www.javascriptkit.com/javatutors/onmousewheel.shtml http://www.javascriptkit.com/javatutors/onmousewheel.shtml
当然,这是可以玩的小提琴:http://jsfiddle.net/ZZqLr/5/ http://jsfiddle.net/ZZqLr/5/
EDIT
为了完成答案,我们将添加当您再次向上滚动时仅向上滚动侧边栏而不是页面的行为,为此我们只需通过以下方式防止滚动事件event.preventDefault()
并在末尾添加以下代码mouseWheelEventHandler
:
if( sidebar.scrollTop() == 0 ) {
sidebar.removeClass('scrollable');
}
该函数如下所示:
function mouseWheelEventHandler(e)
{
if( !sidebar.hasClass('scrollable') && !sidebar.is(":hover") ) {
return true;
}
var event = window.event || e; //equalize event object
event.preventDefault();
var delta = event.detail ? event.detail*(-120) : event.wheelDelta; //check for detail first so Opera uses that instead of wheelDelta
sidebar.scrollTop(sidebar.scrollTop()-delta);
if( sidebar.scrollTop() == 0 ) {
sidebar.removeClass('scrollable');
}
}
您再次可以在这里使用它:http://jsfiddle.net/ZZqLr/6/ http://jsfiddle.net/ZZqLr/6/
顺便说一句,waypoints.js 甚至不是必需的,只是为了好玩,无需 waypoints.js,只需删除 waypoint 函数并在 eventHandle 函数中添加以下内容即可:
function mouseWheelEventHandler(e)
{
if( !sidebar.hasClass('scrollable') && !sidebar.is(":hover") ) {
if($(window).scrollTop() + $(window).height() == $(document).height()) {
sidebar.addClass('scrollable');
}
return true;
}
var event = window.event || e; //equalize event object
event.preventDefault();
var delta = event.detail ? event.detail*(-120) : event.wheelDelta; //check for detail first so Opera uses that instead of wheelDelta
sidebar.scrollTop(sidebar.scrollTop()-delta);
if( sidebar.scrollTop() == 0 ) {
sidebar.removeClass('scrollable');
}
return true;
}
也为了玩这个,你可能已经猜到了:http://jsfiddle.net/ZZqLr/7/ http://jsfiddle.net/ZZqLr/7/
我想这就是全部了:)