首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExtJs6.2经典版不适用于Firefox和触摸屏

ExtJs6.2经典版不适用于Firefox和触摸屏
EN

Stack Overflow用户
提问于 2017-04-05 16:36:06
回答 2查看 1.7K关注 0票数 4

如果屏幕启用了触摸,ExtJ6.2.0在Firefox上就不能工作了。我注意到了使用该框架的经典版本的问题,我无法判断现代版本是否也受到了影响。

这正是问题所在:如果屏幕启用了触摸功能,则可以通过手势使用应用程序,但不能使用鼠标。鼠标单击不会触发单击事件。

森查论坛上提到了这个问题,但令人沮丧的是,Sencha为订阅者解决了这个问题,但并没有发布新的GPL版本。还有一个代码片段,但我不太清楚如何使用它:

代码语言:javascript
复制
// Undo sencha's logic 
// Needed for top nav buttons to not open links in new tabs/windows when clicked in IE11 EXTJS-13775
// Firefox 52 is getting deteceted now as ALWAYS having pointer events
// chromeOS causing issues too
// unit tests failing
if (Ext.isIE || Ext.isEdge || (Ext.firefoxVersion >= 52) || Ext.os.is.ChromeOS || window.inUnitTest) {
    // sorry windows mobile phones...
    var eventMap = Ext.dom.Element.prototype.eventMap;
    eventMap.click = 'click';
    eventMap.dblclick = 'dblclick';
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-05 16:41:32

经过一些尝试和错误,并在代码中比较了console.log和rifling,我想出了一个覆盖来修复这个bug。

代码语言:javascript
复制
/**
 * workaround for bug in ExtJs 6.2.0.
 * Resolved in current yet unreleased version
 */
Ext.define('Mb.override.dom.Element', {
    override: 'Ext.dom.Element'
},
function(){
    var additiveEvents = this.prototype.additiveEvents,
        eventMap = this.prototype.eventMap;
    if(Ext.supports.TouchEvents && Ext.firefoxVersion >= 52 && Ext.os.is.Desktop){
        eventMap['touchstart'] = 'mousedown';
        eventMap['touchmove'] = 'mousemove';
        eventMap['touchend'] = 'mouseup';
        eventMap['touchcancel'] = 'mouseup';
        eventMap['click'] = 'click';
        eventMap['dblclick'] = 'dblclick';
        additiveEvents['mousedown'] = 'mousedown';
        additiveEvents['mousemove'] = 'mousemove';
        additiveEvents['mouseup'] = 'mouseup';
        additiveEvents['touchstart'] = 'touchstart';
        additiveEvents['touchmove'] = 'touchmove';
        additiveEvents['touchend'] = 'touchend';
        additiveEvents['touchcancel'] = 'touchcancel';

        additiveEvents['pointerdown'] = 'mousedown';
        additiveEvents['pointermove'] = 'mousemove';
        additiveEvents['pointerup'] = 'mouseup';
        additiveEvents['pointercancel'] = 'mouseup';
    }
})

我没有测试每个事件翻译组合是否有效。鼠标触发的带有触摸屏的click事件所需的线条包括:

代码语言:javascript
复制
eventMap['click'] = 'click';
eventMap['dblclick'] = 'dblclick';
票数 3
EN

Stack Overflow用户

发布于 2017-04-06 21:52:13

这是个众所周知的问题。有关详细信息,请参阅我们的站点兼容性说明:https://www.fxsitecompat.com/en-CA/docs/2016/touch-event-support-has-been-re-enabled-on-windows-desktop/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43236899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档