• Extjs基于Card布局和按钮实现tab页效果


    Extjs基于Card布局和按钮实现tab页效果

    功能由来

        Extjs的tabpanel已经比较强大,各种方法和事件的封装基本已经满足了业务场景,但是近期需要实现一个带点网站色彩的门户。初步与Boss演示后,Boss觉得Tab页样式太普通,千遍一律,没有个性。的确这个tab页看多了比较厌倦。

        于是乎就引出了本篇文章,需要用按钮实现tab页的切换效果。先放效果图:

    实现原理

        要现实该功能原本想到了放个panel,并且让panel签入iframe,上头放个toolbar,实现按钮的切换加载不同的iframe页面。可想而知每次切换按钮的时候,每个页面都是重新加载的,这样不仅慢而且点多了IE容易奔溃,同时也做不到不同页面之间的交互。查阅Extjs布局功能后,恍然大于,card布局就符合该功能。下一步...下一步的导航功能,每次切换是不会重新加载的。于是赶紧着手实现。并且头上的按钮的选中效果,哥又分析了下toolbar的源码,发现只是改个样式就OK了。


    实现过程

        按钮效果

              为toolbar添加以下代码:

                pressed: false,
                toggleGroup: 'butToolbar',
                allowDepress: false,

              实现不同按钮选中的效果。不过每次打开一个新按钮需要选中按钮,这里需要在添加按钮的同时为按钮额外添加样式,并且移除其余按钮的选中样式:

     1     wf.setSelectedAndRemoveOther = function(currentBut) {
     2         var me = currentBut;
     3         me.addClass("x-pressed x-btn-pressed x-btn-default-toolbar-small-pressed");
     4         me.isPressed = 1;
     5         var buts = Ext.getCmp('butToolbar').items;
     6         for (var i = 0; i < buts.length; i++) {
     7             if (buts.items[i].id != me.id) {
     8                 buts.items[i].removeCls("x-pressed x-btn-pressed x-btn-default-toolbar-small-pressed");
     9                 buts.items[i].isPressed = 0;
    10             }
    11         }
    12     };

        页面切换

    首先添加card布局容器是必须的:

        wf.mainPanel = new Ext.create('Ext.panel.Panel', {
            region: 'center',
            id: 'mainPanel',
            border: false,
            layout:'card',
            items:[
            {id:'Portalmain',html:'<iframe scrolling="auto" frameborder="0" width="100%" height="100%" src="' + wf.config.pagePath + "Container" + '"></iframe>'}
            ]
        });

    默认可以打开一个主页,随着功能树节点的事件再往里面添加新页面:

    1 //添加card页面
    2 Ext.getCmp('mainPanel').add({id:butObj.id+'_toolbarsplitbut_itemPage',html:'<iframe scrolling="auto"  frameborder="0" width="100%" height="100%"  src="' + url + '"></iframe>'});
    3 
    4 //添加按钮
    5   Ext.getCmp('butToolbar').insert(0,{
    6                 xtype: 'splitbutton',...});
    7 
    8 //选中当前页面
    9 Ext.getCmp('mainPanel').getLayout().setActiveItem(butObj.id+'_toolbarsplitbut_itemPage');

    当然除了添加按钮外还需要实现 按钮右边的关闭功能。这里我把splitbutton的下拉图片改成了X的效果,并且在每个按钮里面添加了 arrowHandler事件,用这个事件来实现移除按钮和页面:

     1 arrowHandler: function() {
     2 var currentPage = Ext.getCmp(this.id + '_itemPage');
     3 
     4 if (currentPage) {
     5 //显示下个界面 具体逻辑不展开
     6 wf.findNextPageAndOpen(this);
     7 //移除当前页面
     8 Ext.getCmp('mainPanel').remove(currentPage);
     9 }
    10 
    11 Ext.getCmp('butToolbar').remove(this); //自我销毁
    12 Ext.getCmp('butToolbar').doLayout();
    13 }

    至此基本功能已经完成,此处我就不放源码了,公司的代码不易开放。

  • 相关阅读:
    第五次作业——词法分析程序的设计与实现
    第四次作业——文法和语言总结与梳理
    第三次作业-语法树,短语,直接短语,句柄
    消除左递归
    DFA最小化
    非确定的自动机NFA确定化为DFA
    正规式到正规文法与自动机
    正规文法与正规式
    词法分析程序的设计与实现
    第四次作业-文法和语言总结与梳理
  • 原文地址:https://www.cnblogs.com/blogsfuh/p/3114944.html
Copyright © 2020-2023  润新知