区分鼠标滚轮滚动还是滚动条滚动?

rot*_*rcz 5 javascript jquery

我在Stackoverflow上搜索过,但似乎无法找到这个问题的满意答案.基本上我想知道滚动是通过鼠标滚轮还是浏览器滚动条完成的.

t.n*_*ese 6

这样的东西可能适合你,但它不是最好的解决方案.

如果a wheel事件恰好发生在scroll事件之前,那么滚动就完成了轮子,否则就完成了使用其他东西然后轮子.触发的两个事件之间存在微小的时间差异,这就是我使用阈值的原因currTime - lastWheelTime > 30.

$('.test').on('scroll wheel DOMMouseScroll mousewheel', function(e) {
    var lastWheelTime,
        currTime = (new Date()).getTime(); 

    if( e.type === 'scroll' ) {
        lastWheelTime = $(this).data().lastWheelTime || 0;

        if( currTime - lastWheelTime > 30 ) {
           $('.info').text('no wheel');
        } else {
           $('.info').text('with wheel');
        }

    } else {
        $(this).data().lastWheelTime = (new Date()).getTime(); 
    }
});
Run Code Online (Sandbox Code Playgroud)
.test {
    width: 200px;
    height: 300px;
    border: 1px solid red;
    overflow: auto;
}
 
.inner {
    height: 600px;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="info"></div>
<div class="test">
    <div class="inner"></div>
</div>
Run Code Online (Sandbox Code Playgroud)