重新启用touchmove eventlistener。 iPhone应用程序与手机差距

时间:2011-09-20 16:11:11

标签: javascript cordova

我在js的顶部有以下权利(这是iScroll插件工作所需的)。

document.addEventListener('touchmove', function (e) {e.preventDefault();}, false);

在某些页面上,我需要重新启用此功能,以便正常的iPhone滚动接管(以及修复在页面上使用iscroll时iphone键盘不会在输入框中弹出的错误。)

我无法锻炼语法。有人知道吗?

2 个答案:

答案 0 :(得分:12)

您需要定义一个处理preventDefault行为的函数,如下所示:

document.addEventListener('touchmove', preventDefault, false);
function preventDefault(e) { e.preventDefault(); };

稍后在您的代码中,您可以删除事件侦听器并重新启用默认滚动:

document.removeEventListener('touchmove', preventDefault, false);

现在,您可以在需要时重新添加和删除它。

你无法使用原始帖子中的内联匿名函数来完成此操作,因为你可以引用匿名函数的唯一方法是先触发它然后删除对它的引用,例如:

document.addEventListener('touchmove', function(e) {
    e.preventDefault();

    // some more logic...

    this.removeEventListener('touchmove', arguments.callee, false);
}, false);

显然,这不是你想要的效果。您还可以创建一个对象并存储对处理该事件的方法的引用。如果你想深入一点,我发现这个帖子很有帮助:How to removeEventListener on anonymous function?

答案 1 :(得分:0)

在我的iphone上的addEventListener之后,我不能再删除它们了。 但这对我有用。

var prevent = preventDefault(e) { e.preventDefault(); };
//To disable drag
element.ontouchmove = prevent;

...

//To enable it agian
element.ontouchmove = null;