注意:正如@nevf的评论所指出的,由于性能变化,该解决方案可能不再起作用(至少在Chrome中)。建议使用touch-action
@JohnWeisz的答案也建议使用。
类似于@Llepwryd给出了答案,我用的组合ontouchstart
,并ontouchmove
防止滚动时,它是有一定的元素。
摘自我的一个项目:
window.blockMenuHeaderScroll = false;
$(window).on('touchstart', function(e)
{
if ($(e.target).closest('#mobileMenuHeader').length == 1)
{
blockMenuHeaderScroll = true;
}
});
$(window).on('touchend', function()
{
blockMenuHeaderScroll = false;
});
$(window).on('touchmove', function(e)
{
if (blockMenuHeaderScroll)
{
e.preventDefault();
}
});
本质上,我正在做的事情是监听触摸开始,以查看它是否开始于使用jQuery的另一个元素的子元素,.closest
并允许在滚动时打开/关闭触摸运动。该e.target
指触摸开始始于元素。
您想防止触摸移动事件的默认设置,但是您还需要在触摸事件结束时为此清除标志,否则任何触摸滚动事件都不会起作用。
这可以在没有jQuery的情况下完成,但就我的用法而言,我已经有了jQuery,不需要编写任何代码来查找元素是否具有特定的父级。
截至2013-06-18,已在Android和iPod Touch上的Chrome中进行了测试