2012-10-13 375 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; 
}