2012-10-13 379 views
10

UPDATETypeScript是否支持TouchEvent?

TypeScript 1.5.3 added declarations for HTML Touch events to lib.d.ts

我可以看到它支持的UIEvent,但它似乎并没有对触摸事件的接口。

此代码指示“TouchEvent在当前范围内不存在”。

class Touchy { 
    private _element:Element; 

    constructor(theElement:Element) { 
     this._element = theElement; 

     theElement.addEventListener("touchstart", (theTouchEvent:TouchEvent) => alert("touchy")); 
    } 
} 

我可以使用UIEvent,但不能使用TouchEvent。如何使用TypeScript处理TouchEvent?谢谢。

+0

@norahiko有Github上项目与方法是:https://github.com/norahiko/TouchEvent.d.ts –

+0

这。 :[github.com/borisyankov/DefinitelyTyped/touch-events/touch-events.d.ts](https://github.com/borisyankov/DefinitelyTyped/blob/master/touch-events/touch-events.d.ts ) – harry0000

回答

5

您有几种选择在这里:

第一种选择:扩展的UIEvent有你所期望的成员上的TouchEvent(只有在触摸事件侦听器使用它们):

interface UIEvent { 
    targetTouches: { pageX: number; pageY: number; }[]; 
    // etc... 
} 

第二个选项:定义您自己的TouchEvent界面并在绑定事件时添加类型断言

interface TouchEvent { 
    (event: TouchEventArgs): void; 
} 

interface TouchEventArgs { 
    targetTouches: { pageX: number; pageY: number; }[]; 
    // etc 
} 

theElement.addEventListener("touchstart", <UIEvent>((theTouchEvent:TouchEvent) => alert("touchy"))); 
+0

这个ommision很奇怪。感谢您的建议。学习TypeScript环境的时间。 – Ezward

14

感谢您的建议。我参加了2011年5月5日的触觉事件规范W3C工作草案,并从中创建了一组环境声明。有一个更近的候选人建议,但这是我认为实际上在大多数浏览器中实现的。这似乎运作良好。

PS:底部的声明var TouchEvent不是w3c草稿的一部分。它是适用于UIEvent的相同代码,它是TypeScript附带的标准接口的一部分。

interface Touch { 
    identifier:number; 
    target:EventTarget; 
    screenX:number; 
    screenY:number; 
    clientX:number; 
    clientY:number; 
    pageX:number; 
    pageY:number; 
}; 

interface TouchList { 
    length:number; 
    item (index:number):Touch; 
    identifiedTouch(identifier:number):Touch; 
}; 

interface TouchEvent extends UIEvent { 
    touches:TouchList; 
    targetTouches:TouchList; 
    changedTouches:TouchList; 
    altKey:bool; 
    metaKey:bool; 
    ctrlKey:bool; 
    shiftKey:bool; 
    initTouchEvent (type:string, canBubble:bool, cancelable:bool, view:AbstractView, detail:number, ctrlKey:bool, altKey:bool, shiftKey:bool, metaKey:bool, touches:TouchList, targetTouches:TouchList, changedTouches:TouchList); 
}; 

declare var TouchEvent: { 
    prototype: TouchEvent; 
    new(): TouchEvent; 
} 
+0

你有最新版本的打字机代码吗?我为AbstractView和MSHTMLElementRangeExtensions等出错。 – morpheus

5

这里是附录。此代码将类型事件处理程序添加到HTMLElement。您可以在定义TouchEvent接口的代码之后添加它;

// 
// add touch events to HTMLElement 
// 
interface HTMLElement extends Element, MSHTMLElementRangeExtensions, ElementCSSInlineStyle, MSEventAttachmentTarget, MSHTMLElementExtensions, MSNodeExtensions { 
    ontouchstart: (ev: TouchEvent) => any; 
    ontouchmove: (ev: TouchEvent) => any; 
    ontouchend: (ev: TouchEvent) => any; 
    ontouchcancel: (ev: TouchEvent) => any; 
}