javascript - 如何在 extjs 中将鼠标悬停在标题栏上临时展开折叠面板?

标签 javascript extjs

我有一个边界布局,在中心和西部区域有两个面板。默认情况下,西面板是折叠的,如果您在折叠时单击标题栏的任何部分,面板会暂时展开,直到您将鼠标指针移出其边界。

我想要做的是让这个相同的“临时展开”不是通过点击面板的标题栏,而是将鼠标悬停在它上面。我怎样才能做到这一点?

这是我的代码:

Ext.onReady(function() {
    Ext.create('Ext.window.Window', {
        width: 500,
        height: 300,

        layout: 'border',

        items: [{
                xtype: 'panel',
                title: 'Center Panel',
                region: 'center',
                flex: 1
            },{
                xtype: 'panel',
                title: 'West Panel',
                region: 'west',
                flex: 1,

                collapsible: true,
                collapsed: true,
                animCollapse: false,
                collapseDirection: Ext.Component.DIRECTION_BOTTOM,
                titleCollapse: true
        }]
    }).show();
});

为方便起见,请引用以下 fiddle :http://jsfiddle.net/3FJ58/3/

提前致谢!

最佳答案

是的,这是可能的,但您必须从 Ext.panel.Panel 扩展以覆盖 borderlayout 使用的 getPlaceholder 方法

getPlaceholder: function(direction) {
    var me = this,
        collapseDir = direction || me.collapseDirection,
        listeners = null,
        placeholder = me.placeholder,
        floatable = me.floatable,
        titleCollapse = me.titleCollapse;

    if (!placeholder) {
        if (floatable || (me.collapsible && titleCollapse)) {
            listeners = {
                mouseenter: {
                    // titleCollapse needs to take precedence over floatable
                    fn: (!titleCollapse && floatable) ? me.floatCollapsedPanel : me.toggleCollapse,
                    element: 'el',
                    scope: me
                }
            };
        }

        me.placeholder = placeholder = Ext.widget(me.createReExpander(collapseDir, {
            id: me.id + '-placeholder',
            listeners: listeners
        }));
    }

    // User created placeholder was passed in
    if (!placeholder.placeholderFor) {
        // Handle the case of a placeholder config
        if (!placeholder.isComponent) {
            me.placeholder = placeholder = me.lookupComponent(placeholder);
        }
        Ext.applyIf(placeholder, {
            margins: me.margins,
            placeholderFor: me
        });

        placeholder.addCls([Ext.baseCSSPrefix + 'region-collapsed-placeholder', Ext.baseCSSPrefix + 'region-collapsed-' + collapseDir + '-placeholder', me.collapsedCls]);
    }

    return placeholder;
}

查看更新的 JSFiddle

重写至少是 IMO 最干净的方式。但也可以操纵由 borderlayout 创建的占位符。

@JoseRivas 已经发布了类似的内容,但由于存在一些问题,我将添加如何以更简洁的方式完成此操作的片段

listeners: {
   afterrender: function(p){
      p.placeholder.getEl().on('mouseenter', function(){ p.floatCollapsedPanel() })
   }
}

查看更新的 JSFiddle

关于javascript - 如何在 extjs 中将鼠标悬停在标题栏上临时展开折叠面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20100071/

相关文章:

javascript - JS 数字方法不起作用

javascript - fetch API 采用的第二个参数到底是什么?

javascript - ExtJS 有条件地渲染输入字段

javascript - 实现 Sencha Touch ListPaging 插件

javascript - 取消选中 ExtJS 网格过滤器复选框不会删除过滤器

javascript - 如何在 extjs 中为 json 数组创建模型?

javascript - parseInt() 不考虑前导零,即使有基数

javascript - Gulp 不会监视任何 SCSS 更改。我必须使用 gulp-ruby-sass 吗?

javascript - NodeJS - 回调未执行

javascript - ExtJS 面板追加 html