Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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 如何判断Microsoft IE10中是否只有一个手指在触摸_Javascript_Touch_Internet Explorer 10 - Fatal编程技术网

Javascript 如何判断Microsoft IE10中是否只有一个手指在触摸

Javascript 如何判断Microsoft IE10中是否只有一个手指在触摸,javascript,touch,internet-explorer-10,Javascript,Touch,Internet Explorer 10,我们正在模拟无限列表的滚动,我们希望检测单个手指滚动或用户开始手势之间的差异 理论上,对于每个MSPointerDown事件(和/或使用event.msPointerId匹配手指),可以将IE10中的手指数减少+1,对于MSPointerUp事件(和/或使用event.msPointerId匹配手指数) 实际上,至少有一个错误,IE10将生成MSPointerDown事件,但从未发送匹配的MSPointerUp事件。(很抱歉,我无法创建一个简单的测试用例来显示这一点,但我确实花了很多时间检查MS

我们正在模拟无限列表的滚动,我们希望检测单个手指滚动或用户开始手势之间的差异

理论上,对于每个
MSPointerDown
事件(和/或使用event.msPointerId匹配手指),可以将IE10中的手指数减少+1,对于
MSPointerUp
事件(和/或使用event.msPointerId匹配手指数)

实际上,至少有一个错误,IE10将生成MSPointerDown事件,但从未发送匹配的MSPointerUp事件。(很抱歉,我无法创建一个简单的测试用例来显示这一点,但我确实花了很多时间检查MSPointerUp事件是否确实丢失。可能是因为在触摸过程中删除了子元素)

也许可以使用MS手势事件查看多个手指是否向下?(我尝试了一下,但几乎没有成功,但可能是其他人解决了这个问题)

有什么想法吗


PS:在webkit中,等效的方法是在touchstart事件中检查
event.touchs.length===1
(请注意,您需要一个不明显的技巧来实现此功能:document.ontouchstart必须注册一个事件,然后event.touchs.length对于在其他元素上注册的touchstart事件将是正确的).

确保您也在跟踪MSPointerOut。我发现,如果您在可跟踪区域之外放开屏幕,则不会调用MSPointerUp

如果有用的话,我有一个WinJS类用来跟踪多点触摸状态

var TouchState = WinJS.Class.define(
function () {
    this.pointers = [];
    this.primaryPointerId = 0;

    this.touchzones = [];
}, {
    touchHandler: function (eventType, e) {
        if (eventType == "MSPointerDown") {
            if (!this.pointers[this.primaryPointerId] || !this.pointers[this.primaryPointerId].touching) {
                this.primaryPointerId = e.pointerId;
            }
            e.target.msSetPointerCapture(e.pointerId);
            this.pointers[e.pointerId] = {
                touching: true,
                coords: {
                    x: e.currentPoint.rawPosition.x,
                    y: e.currentPoint.rawPosition.y
                }
            };
            this.checkTouchZones(this.pointers[e.pointerId].coords.x, this.pointers[e.pointerId].coords.y, e);
        }
        else if (eventType == "MSPointerMove") {
            if (this.pointers[e.pointerId]) {
                this.pointers[e.pointerId].coords.x = e.currentPoint.rawPosition.x;
                this.pointers[e.pointerId].coords.y = e.currentPoint.rawPosition.y;
            }
        }
        else if (eventType == "MSPointerUp") {
            if (this.pointers[e.pointerId]) {
                this.pointers[e.pointerId].touching = false;
                this.pointers[e.pointerId].coords.x = e.currentPoint.rawPosition.x;
                this.pointers[e.pointerId].coords.y = e.currentPoint.rawPosition.y;                    
            }
        }
        else if (eventType == "MSPointerOut") {
            if (this.pointers[e.pointerId]) {
                this.pointers[e.pointerId].touching = false;
                this.pointers[e.pointerId].coords.x = e.currentPoint.rawPosition.x;
                this.pointers[e.pointerId].coords.y = e.currentPoint.rawPosition.y;
            }
        }
    },
    checkTouchZones: function (x, y, e) {
        for (var zoneIndex in this.touchzones) {
            var zone = this.touchzones[zoneIndex];
            if (x >= zone.hitzone.x1 && x < zone.hitzone.x2 && y > zone.hitzone.y1 && y < zone.hitzone.y2) {
                zone.callback(e);
            }
        }
    },
    addTouchZone: function (id, hitzone, callback) {
        this.touchzones[id] = {
            hitzone: hitzone,
            callback: callback
        };
    },
    removeTouchZone: function (id) {
        this.touchzones[id] = null;
    }
});
var touchtate=WinJS.Class.define(
函数(){
this.pointers=[];
this.primaryPointerId=0;
this.touchzones=[];
}, {
touchHandler:函数(eventType,e){
if(eventType==“MSPointerDown”){
如果(!this.pointers[this.primaryPointerId]| |!this.pointers[this.primaryPointerId].触摸){
this.primaryPointerId=e.pointerId;
}
e、 target.msSetPointerCapture(即指针ID);
this.pointers[e.pointerId]={
感人的是,,
协调:{
x:e.currentPoint.rawPosition.x,
y:e.currentPoint.rawPosition.y
}
};
this.checkTouchZones(this.pointers[e.pointerId].coords.x,this.pointers[e.pointerId].coords.y,e);
}
else if(eventType==“MSPointerMove”){
if(this.pointers[e.pointerId]){
this.pointers[e.pointerId].coords.x=e.currentPoint.rawPosition.x;
this.pointers[e.pointerId].coords.y=e.currentPoint.rawPosition.y;
}
}
else if(eventType==“MSPointerUp”){
if(this.pointers[e.pointerId]){
this.pointers[e.pointerId].touching=false;
this.pointers[e.pointerId].coords.x=e.currentPoint.rawPosition.x;
this.pointers[e.pointerId].coords.y=e.currentPoint.rawPosition.y;
}
}
else if(eventType==“MSPointerOut”){
if(this.pointers[e.pointerId]){
this.pointers[e.pointerId].touching=false;
this.pointers[e.pointerId].coords.x=e.currentPoint.rawPosition.x;
this.pointers[e.pointerId].coords.y=e.currentPoint.rawPosition.y;
}
}
},
checkTouchZones:功能(x、y、e){
for(此.touchzones中的var zoneIndex){
var zone=this.touchzones[zoneIndex];
如果(x>=zone.hitzone.x1&&xzone.hitzone.y1&&y
谢谢。我得试试。