sua*_*kim 0 javascript iframe extjs touch extjs5
前段时间我遇到了一个问题,当我的 ExtJS 5 应用程序嵌入到 IFrame 中时,触摸设备上的滚动不再起作用(请参阅此线程)。
我已经通过覆盖 Ext 框架中的一些内容解决了这个问题(请参阅解决方案)。
解决方案的一个步骤是将touchmove
事件分派给文档本身(框架阻止默认处理此事件):
// ...
touchmove: function(e) {
window.document.dispatchEvent(e.event);
}
// ...
Run Code Online (Sandbox Code Playgroud)
尽管这个解决方案基本上有效,但它有一个缺陷:调度事件会InvalidStateError
在每个touchmove
事件上抛出一个未处理的事件,这显然很常见:
如果我只是在dispatchEvent
语句周围放置一个 try/catch ,则在触摸设备上的 IFrame 内滚动不再起作用,就好像根本没有调用它一样。
如何在不再次中断滚动的情况下摆脱错误?
可以在此处测试滚动有效但发生许多未处理错误的 Testapp 。
我找到了一个非常简单的解决方案:您可以通过false
在处理程序中返回来退出事件处理:
touchmove: function(e) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
这将使滚动气泡上升到浏览器并得到正确处理。您还有其他需要注意的限制吗?
如果你真的想重新调度事件,这是正确的方法:
window.document.dispatchEvent(
new old_event.constructor(old_event.type, old_event)
);
Run Code Online (Sandbox Code Playgroud)
另请参阅:如何克隆或重新调度 DOM 事件?
归档时间: |
|
查看次数: |
3587 次 |
最近记录: |