Javascript 如何使用Hammer.js在iOS中禁用垂直滚动?
我正在尝试在iOS中使用水平滚动列表中的Hammer.js(jQuery版本)禁用垂直滚动。我试过这个: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.
$(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(),但仍然没有帮助。您是否尝试过更新后的答案?