Javascript 如何使用Hammer.js在iOS中禁用垂直滚动?

Javascript 如何使用Hammer.js在iOS中禁用垂直滚动?,javascript,jquery,safari,multi-touch,hammer.js,Javascript,Jquery,Safari,Multi Touch,Hammer.js,我正在尝试在iOS中使用水平滚动列表中的Hammer.js(jQuery版本)禁用垂直滚动。我试过这个: $(document).hammer().on('swipe,drag', 'body', function(event) { if (event.direction == Hammer.DIRECTION_UP || event.direction == Hammer.DIRECTION_DOWN) { event.

我正在尝试在iOS中使用水平滚动列表中的Hammer.js(jQuery版本)禁用垂直滚动。我试过这个:

$(document).hammer().on('swipe,drag', 'body',
    function(event)
    {
        if (event.direction == Hammer.DIRECTION_UP || event.direction == Hammer.DIRECTION_DOWN) 
        {
            event.preventDefault();
        }
    }
);
但它不起作用。那么,如何在仍然能够水平滚动的情况下禁用垂直滚动?

Hammer(document.body,{prevent\u defaults:true})

查看此页面:

假设您的
$
是jQuery,并且您使用的是jQuery版本的hammer.js,请尝试此操作

 $('body').hammer().on('touch', function(ev){
      var $t = $(ev.target); //let's you know the exact element you touched.
      if(ev.gesture.direction === 'left' || ev.gesture.direction ==='right'){

      } else {
           ev.gesture.preventDefault();
      }
 });

您可以使用“拖动\块\垂直”选项禁用垂直滚动:

$(document).hammer({drag_block_vertical: true}).on('swipe,drag', 'body', function(event){
    // etc
});
另外,您在body元素上调用它,它应该一直存在。因此,您可以简化为:

$('body').hammer({drag_block_vertical: true}).on('swipe,drag', function(event){
    // etc
});

我是使用event.signature.preventDefault完成的:

$('#horizontalCarousel').hammer({ drag_lock_to_axis: true }).on("swipe drag", function(event) {
        event.gesture.preventDefault();
        if(event.type == "swipe"){
            swipeAction(event);
        } else {
            dragAction(event);
        }
 });
这是给你的答案

[编辑]

我的回答只是让您知道您使用了错误的事件。preventDefault()。事实上,您还使用了错误的语法来检查事件方向。您应该能够以这种方式管理它,尽管我还没有测试过它:

$(document).hammer({ drag_lock_to_axis: true }).on("swipe drag", function(event) {
            if (event.gesture.direction == Hammer.DIRECTION_UP || event.gesture.direction == Hammer.DIRECTION_DOWN){
                 event.gesture.preventDefault();
            }
     });
两件事发生了变化:event.signature.direction和event.signature.preventDefault();event.direction是在旧版本的hammer js上执行此操作的方法


注意:如果您想对刷卡事件执行某些操作,例如:在刷卡时水平跳转更大的数量,您可以合并我的答案。

这不就是禁用所有事件吗?(甚至点击事件)。另外,禁用垂直滚动怎么样?问题是,垂直滚动有时从侧面开始。。。浏览器有时会在它认为你在滚动之后永远占据主导地位。我必须说,当你垂直开始滚动方向时,滚动只会锁定为垂直滚动,这是很常见的。在我看来,这证明了可用性。谢谢你的回答。不幸的是,这无法在我的测试中禁用垂直滚动。你好,巴特。谢谢你的回答。我终于试了一下,但这只是完全禁用了滚动,我已经做到了(当屏幕外没有项目时,我需要它)。我只需要禁用垂直滚动。为什么不确保div不能用css滚动呢?(溢出-y:隐藏;)。您仍然可以使用event.signature.deltaY使div可滚动,以了解手势的移动。您好,谢谢您的回答,但这似乎不适用于在我的测试中禁用垂直滚动。我尝试在其中添加event.preventDefault(),但仍然没有帮助。您是否尝试过更新后的答案?