Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何取消Mobile Safari上的触摸操作?_Javascript_Iphone_Mobile Safari - Fatal编程技术网

Javascript 如何取消Mobile Safari上的触摸操作?

Javascript 如何取消Mobile Safari上的触摸操作?,javascript,iphone,mobile-safari,Javascript,Iphone,Mobile Safari,假设我有一个带有touchEnd事件侦听器的按钮。如果我触摸按钮,将手指滑出按钮,然后释放触摸,我想“取消”触摸事件 如果我使用onClick执行以下操作,则其行为正确: buttonElement.addEventListener('click', function (event) { if (event.target === this) { // Do something } }); 但是,这不适用于“touchEnd”,因为event.target指向原始元素(b

假设我有一个带有
touchEnd
事件侦听器的按钮。如果我触摸按钮,将手指滑出按钮,然后释放触摸,我想“取消”触摸事件

如果我使用
onClick
执行以下操作,则其行为正确:

buttonElement.addEventListener('click', function (event) {
    if (event.target === this) {
    // Do something
    }
});
但是,这不适用于“touchEnd”,因为
event.target
指向原始元素(
buttonElement
),而不是指向我释放touch的元素


除了在“touchMove”上设置标志这样的操作外,还有更好的通用方法吗?谢谢

使用触摸事件:touchstart、touchmove、touchcancel、touchend。看


不管怎样,我不认为我会试图取消这次活动。在事件中,我会检查“光标”(手指)的位置,如果它在该区域之外,就不要启动该功能。

使用触摸事件:touchstart、touchmove、touchcancel、touchend。看


不管怎样,我不认为我会试图取消这次活动。在这个事件中,我会检查“光标”(手指)的位置,如果它在该区域之外,就不要启动该功能。

我知道这个问题很老,但我正在搜索如何做同样的事情,我编写了一个代码,可以工作,如果以后有人需要的话

我只是在触摸移动时取消默认操作。在我的WebApp上运行得很好,反馈比处理mouseup和mousedown事件要好得多,在mobilesafari上运行太慢了

var moved=false;

function touchstart(){
    moved=false;
    //highlight button for feedback
}

function touchmove(){
    moved=true;
}

function touchend(){
    //undo-highlight the button

    if(moved) touchcanceled();
    else action();
}

function touchcanceled(){
    //user just flicked the button,
    //probably scrolling the view
}

function action(){
    alert("You triggered me!");
}

*将这些函数添加到各自的事件侦听器中

我知道这个问题很老了,但我正在搜索如何做同样的事情,我编写了一个有效的代码,如果以后有人需要的话

我只是在触摸移动时取消默认操作。在我的WebApp上运行得很好,反馈比处理mouseup和mousedown事件要好得多,在mobilesafari上运行太慢了

var moved=false;

function touchstart(){
    moved=false;
    //highlight button for feedback
}

function touchmove(){
    moved=true;
}

function touchend(){
    //undo-highlight the button

    if(moved) touchcanceled();
    else action();
}

function touchcanceled(){
    //user just flicked the button,
    //probably scrolling the view
}

function action(){
    alert("You triggered me!");
}

*很久以前,将这些函数添加到各自的事件侦听器中,但我只想添加我的2c值,因为这个问题还没有公认的答案

touchCancel目前在移动平台上不太可靠

见:

或者,您也可以编写自己的事件覆盖,就像在中所做的那样


这样你就可以在取消之前确定手势的类型。

很久以前,我只是想增加我的2c值,因为这个问题还没有公认的答案

touchCancel目前在移动平台上不太可靠

见:

或者,您也可以编写自己的事件覆盖,就像在中所做的那样


这样,您可以在取消之前确定手势的类型。

这是正确的方法。只有当用户收到呼叫或推送通知时才会调用touchcancel。是的,我知道touchcancel是如何触发的,因此引号中有“cancel”。因此,基本上没有办法跟踪事件侦听器之外的某些状态?这是正确的方法。只有当用户收到呼叫或推送通知时才会调用touchcancel。是的,我知道touchcancel是如何触发的,因此引号中有“cancel”。所以基本上没有办法跟踪事件监听器之外的状态?