2012-02-17 116 views
2

我在我的网站上有一个侧栏,偶尔需要滚动。当使用鼠标滚轮将边栏滚动到底部后,主窗口开始滚动时,这是一种不愉快的用户体验。锁定鼠标滚轮以对焦div

我想,以确保主窗口不使用鼠标滚轮滚动时,鼠标滚轮是在我的侧边栏,但最好只当我的侧边栏本身显示滚动条。

我可能想避免使用JavaScript滚动条,因为它们看起来往往不像默认值(laggier,等待其他js代码等),尽管它看起来像这个解决方案可能需要它们。

谢谢!

编辑:: 这里是我最终使用的代码,我从我接受的答案中找到的第一个链接的简单改编。

(function($) { 
    $.fn.hasScrollBar = function() { 
     return this.get(0).scrollHeight > this.height(); 
    } 
})(jQuery); 

/** This is high-level function. 
* It must react to delta being more/less than zero. 
*/ 
function handle(delta) { 
    slider = $('#wl-slider'); 

    if(slider.hasScrollBar()){ 
     if (delta > 0 && slider.scrollTop() == 0 && slider.hasClass('scroll-hover')){ 
      event.preventDefault(); 
      event.returnValue = false; 
     } 
     else if (delta < 0 && (slider.get(0).scrollHeight - slider.scrollTop() == slider.outerHeight()) && slider.hasClass('scroll-hover')){ 
      event.preventDefault(); 
      event.returnValue = false; 
     } 

    } 
} 



/** Event handler for mouse wheel event. 
*/ 
function wheel(event){ 

     var delta = 0; 
     if (!event) /* For IE. */ 
       event = window.event; 
     if (event.wheelDelta) { /* IE/Opera. */ 
       delta = event.wheelDelta/120; 
     } else if (event.detail) { /** Mozilla case. */ 
       /** In Mozilla, sign of delta is different than in IE. 
       * Also, delta is multiple of 3. 
       */ 
       delta = -event.detail/3; 
     } 
     /** If delta is nonzero, handle it. 
     * Basically, delta is now positive if wheel was scrolled up, 
     * and negative, if wheel was scrolled down. 
     */ 
     if (delta) 
       handle(delta); 

} 

/** Initialization code. 
* If you use your own event management code, change it as required. 
*/ 
if($('#user-level').size() != 0) 
{ 
    if (window.addEventListener) 
     /** DOMMouseScroll is for mozilla. */ 
     window.addEventListener('DOMMouseScroll', wheel, false); 
    /** IE/Opera. */ 
    window.onmousewheel = document.onmousewheel = wheel; 
} 
+0

我看着JScrollPane中(http://jscrollpane.kelvinluck.com/),但我一直没能找到满足我的一切要求,但一个解决方案。 – 2012-02-17 12:41:05

回答

2

我想你不会满足于标准事件处理程序例如在jQuery和需要直接处理鼠标滚轮 - 我只是用Google搜索这些资源:

然后直接看,如果侧边栏是在底部/顶部已经滚动如果是,则过滤掉滚动事件。

+0

谢谢,我现在正在实施它 – 2012-02-17 13:08:54

+0

@TrespassersW这是否适合您? – MattW 2012-03-15 13:52:33

+2

@MattW是的,它发挥出色。我基本上只是使用第一个链接的代码,并将它们一起用于我的案例。我无法在评论中使用我的代码,但我会将其编辑到我的答案中。 – 2012-03-16 02:38:49