屏蔽wheelscroll

大智若愚- 仅屏蔽document,不屏蔽弹窗内部scroll

by 21freestyle

HTML

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>scrollWheel demo</title>
</head>
<body>
   <ul>
       <li class="item">1</li>
       <li class="item">2</li>
       <li class="item">3</li>
       <li class="item">4</li>
        <li class="item">1</li>
       <li class="item">2</li>
       <li class="item">3</li>
       <li class="item">4</li>
       <li class="item">5</li>
        <li class="item">1</li>
       <li class="item">2</li>
       <li class="item">3</li>
       <li class="item">4</li>
       <li class="item">5</li>
        <li class="item">1</li>
       <li class="item">2</li>
       <li class="item">3</li>
       <li class="item">4</li>
       <li class="item">5</li>
       <li class="item">5</li>
   </ul>
    <div class="middle">
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        <p class="item">hello</p>
        
    </div>
    
   <ul>
       <li class="item">1</li>
       <li class="item">2</li>
       <li class="item">3</li>
       <li class="item">4</li>
       <li class="item">5</li>
       <li class="item">1</li>
       <li class="item">2</li>
       <li class="item">3</li>
       <li class="item">4</li>
       <li class="item">5</li>
       <li class="item">1</li>
       <li class="item">2</li>
       <li class="item">3</li>
       <li class="item">4</li>
       <li class="item">5</li>
       <li class="item">1</li>
     ...

CSS

.middle {
    overflow: scroll;
    height: 300px;
    background: #fc0;
}

JavaScript

$(document).get(0).addEventListener('mousewheel', removeWheelEvent, false);  
$('.middle').get(0).addEventListener('mousewheel', enAbleScroll, false);   
function enAbleScroll(e) {
    e.stopPropagation();
    e.cancelBubble = false;
    var obj = $('.middle').get(0);
    var delta = 0;
        
        if (e.wheelDelta) { /* IE/Opera. */
                delta = e.wheelDelta/120;
        } else if (e.detail) { /** Mozilla case. */
                /** In Mozilla, sign of delta is different than in IE.
                 * Also, delta is multiple of 3.
                 */
                delta = -e.detail/3;
        }
   console.log(delta);
     if($(obj).innerHeight() + $(obj).scrollTop() >= obj.scrollHeight) {
        console.log('bottom');
        if(delta < 0) {
           console.log('to bottom!!');
           e.preventDefault();
           return false;
        }
    }
    if($(obj).scrollTop() === 0) {
        console.log('top');
        
        if(delta > 0) {
           console.log('to top!!');
           e.preventDefault();
           return false;
        }
    }
    return false;
}
function removeWheelEvent (e) {
    console.log('ssss');
    e.stopPropagation();
    e.preventDefault();
    e.cancelBubble = false;
    return false;
}