Javascript 如何在TypeScript中手动触发TouchEvent
我想手动触发触摸事件,但无法呼叫。 这在JavaScript中是可能的,但TypeScript无法实现 例如:Javascript 如何在TypeScript中手动触发TouchEvent,javascript,typescript,jasmine,karma-jasmine,Javascript,Typescript,Jasmine,Karma Jasmine,我想手动触发触摸事件,但无法呼叫。 这在JavaScript中是可能的,但TypeScript无法实现 例如: let touchStart: TouchEvent = document.createEvent('TouchEvent'); touchStart.initEvent('touchstart', true, true); element.dispatchEvent(touchStart); 如果尝试此操作,我可以触发touchStart事件,但无法获取changedTouc
let touchStart: TouchEvent = document.createEvent('TouchEvent');
touchStart.initEvent('touchstart', true, true);
element.dispatchEvent(touchStart);
如果尝试此操作,我可以触发touchStart事件,但无法获取changedTouches[0]。pageX
和changedTouches[0]。pageY
根据我的尝试,如下所示
touchStart.changedTouches = [
pageX: x
pageY: y
]
但是我无法在changedtouchs
中指定值,因为该属性是只读的
如何做到这一点?这是TypeScript的
lib.d.ts
的一个实际缺陷,它定义了JavaScript和DOM中所有内容的类型
我已经打开了一个和一个来解决这个问题
如果它们被接受,您可以期望标准方式newtouchEvent(eventType,initArguments)
在未来版本的TypeScript中工作
请参阅,以了解JavaScript中的正确操作方法。我最近一直在尝试在TypeScript中触发触摸事件,并遇到了相同的问题。通过观察,我看到了AngleMaterial团队在测试中是如何解决这个问题的,所以我采取了类似的方法。下面是我使用
touchstart
模拟触摸事件的代码示例,并设置了changedtouchs
mock数组:
let te = createTouchEvent(parentHtmlElement, 'touchstart');
parentHtmlElement.dispatchEvent(te);
function createTouchEvent(touchTarget: HTMLElement, type: string) {
const event = document.createEvent('UIEvent');
event.initUIEvent(type, true, true, window, 0);
let touches = [{target: touchTarget}];
Object.defineProperties(event, {
changedTouches: {value: touches}
});
return event;
}
在我的组件中,我正在收听以下事件:
this.touchStartListener = this.renderer.listen('document', 'touchstart', (event: TouchEvent) => {
this.handleTouchStart(event);
});
这非常有效,没有TypeScript警告,事件在我的测试中被触发和处理非常有趣的是,TypeScript似乎不支持创建
TouchEvent
s,无论是通过new TouchEvent
还是通过旧的document.createEvent()
。我想提交一个bug,但我现在时间有点短。@MadaraUchiha这是一个bug?是的,它看起来像是TypeScript中的一个真正bug。我只使用事件的changedTouches
属性,所以我只将该属性添加到事件中。如果您使用的是触摸数组
,请添加该数组