Windows Phone的IE Touchstart事件在几秒钟后自动结束
我有一个非常具体的问题。 我正在写一个手机的网页,上面有一个button。 我在包括IE浏览器在内的所有浏览器上都检测到touchevent
,但是在IE浏览器上它非常具体。 几秒钟后自动结束。 你能以某种方式帮助我吗? 这里是我的代码(修改一个,但仍然不能正常工作):
if (window.navigator.pointerEnabled) { tapButton.addEventListener("pointerup", function(e) { e.preventDefault(); addClass(this, 'clicked'); buttonTouched = true; }, false); tapButton.addEventListener("pointerdown", function(e) { e.preventDefault(); removeClass(this, 'clicked'); buttonTouched = false; }, false); alert("pointerEnabled"); } else if (window.navigator.msPointerEnabled) { tapButton.addEventListener("MSPointerDown", function(e) { e.preventDefault(); addClass(this, 'clicked'); buttonTouched = true; }, false); tapButton.addEventListener("MSPointerUp", function(e) { e.preventDefault(); removeClass(this, 'clicked'); buttonTouched = false; }, false); alert("mspointerEnabled"); } else { alert("ordinary touch"); tapButton.addEventListener('touchstart', function(e) { e.preventDefault(); addClass(this, 'clicked'); buttonTouched = true; }, false); tapButton.addEventListener('touchend', function(e) { e.preventDefault(); removeClass(this, 'clicked'); buttonTouched = false; }, false); }
和HTML标签有:
-ms-touch-action: none !important; touch-action: none !important;
但是这也没有帮助。
我怀疑你遇到了多点触控问题
请记住,触摸事件与鼠标事件不同。 你可以触摸多个手指。 如果你用一根手指触摸而不是添加另一只手指会发生什么? 你会得到两个连续的touchstart
事件。 对于touchend
来说也是touchend
。 我怀疑用户的light
是正确的,它可能会触发手指释放不正确…
请看看touches
事件发生了什么, TouchEvent的touches
和targetTouches
属性改变了。 我强烈怀疑你会看到还有一个“手指”左触摸…所以它从2触到1 …
确保(不再)触摸的手指实际上是button上的那个等等,比起那些老式的mousedown
和事件来说简单得多。
编辑:我意识到你的问题是与IE浏览器,它是指针事件…但是,他们的工作大都是相同的,他们也支持多点触摸(因此可能遭受同样的问题)。 我没有看到类似touches
的属性,但我确实看到了一个pointerId
,它可以给你相同的信息(以一些簿记为代价)。
这个MSDN页面有一些很好的信息。 特别是这个代码片段是启发我认为:
function pointerdownHandler(evt) { evt.target.setPointerCapture(evt.pointerId); }
这似乎证实,当手指碰到表面时,接触点会得到一个ID,用于通知您哪个手指在接收到pointerup
事件时离开了表面。
我会添加一些logging,只是在pointerdown
和pointerup
上打印pointerup
,我敢打赌你会很快find你的解决scheme。