【问题标题】:How to disable multiple-scroll effect in osx and fire scroll event once per scroll如何在osx中​​禁用多滚动效果并在每次滚动时触发一次滚动事件
【发布时间】:2015-04-14 13:10:22
【问题描述】:

我需要像 jquery.fullPage 一样组织导航:当我滚动一次时 - 我会转到下一部分。

我尝试使用 jquery.mousewheel,但在带有触摸板或触控板或 APPLE 魔术鼠标的 MacOS 中失败:每次滚动它会滚动多张幻灯片。

我尝试使用这个解决方案:https://github.com/jquery/jquery-mousewheel/issues/36#issuecomment-67648897

它在 Chrome 中可以正常工作,但在 FF 中不能,并且在 Safari 中存在错误。

这是问题的简单演示: http://jsfiddle.net/ss5LueLx/13/

$slider.on('mousewheel', function(event) {
    if (event.deltaY>0) {
        slider.prevSlide();
    } else {
        slider.nextSlide();
    }
});

【问题讨论】:

    标签: javascript jquery macos mousewheel


    【解决方案1】:

    我在我的 SeaMonkey 浏览器中测试了这个语句,但它失败了。

    var delta  = e.type == 'mousewheel' ? e.originalEvent.wheelDelta * -1 : 40 * e.originalEvent.detail;
    

    以防万一,我查看了 deltaY 并且它可以工作:一个方向 +1,另一个方向 -1,正如您在其他两个实现中确定的那样。

    console.log(e.deltaY); // view console in FireBug
    

    查看 Firebug 中的事件结构,我可以看到事件类型是“mousewheel”,但在 originalEvent 中我没有看到 wheelData 字段。

    虽然有一个详细字段,但那个字段仍然为零。

    我想您只有在达到 +/-3 时才尝试转到下一个项目。我会建议一些类似的东西来完成这个壮举:

    // somewhere, initialize to zero
    var current_position = 0;
    
    
    // on mousewheel events
    current_position += e.deltaY;
    
    // you had a x 40 which would indicate that the limit is about 120 / 40
    // if 3 is too small, you can always increase it to 5 or event 10...
    if(current_position <= -3)
    {
      slider.nextSlide();
      current_position = 0;
    }
    else if(current_position >= 3)
    {
      slider.prevSlide();
      current_position = 0;
    }
    

    否则,您可以验证您的 allowScroll 标志是否按预期工作。我不会那样编程对象,所以我不太确定它是否正确。 (我使用prototype 语法,如果您想扩展类,这很有用。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多