• sencha touch TabPanel 加入导航按钮(向左向右按钮) 以及Carousel插件(2014-11-7)


    Carousel插件代码:

     1 /*
     2 * TabPanel的Carousel功能插件
     3 * 取至
     4 * https://github.com/VinylFox/Ext.ux.touch.SwipeTabs
     5 */
     6 Ext.define('ux.plugin.SwipeTabs', {
     7     alias: 'plugin.swipetabs',
     8     xtype: 'swipetabs',
     9     config: {
    10         cmp: null,
    11         //是否循环滚动
    12         allowOverflow: false,
    13         animation: {
    14             duration: 300,
    15             easing: 'ease-out',
    16             type: 'slide'
    17         },
    18         /**
    19         * @cfg {Object} [allowDirections=['left', 'right', 'up', 'down',]] 只有指定方向可以切换.
    20         * @private
    21         * @accessor
    22         */
    23         allowDirections: ['left', 'right']
    24     },
    25     constructor: function (config) {
    26         this.initConfig(config);
    27         this.callParent([config]);
    28     },
    29     init: function (cmp) {
    30         this.setCmp(cmp);
    31     },
    32     updateCmp: function (newCmp, oldCmp) {
    33         if (oldCmp) {
    34             oldCmp.element.un('swipe', this.onSwipe);
    35         }
    36         if (newCmp) {
    37             newCmp.element.on('swipe', this.onSwipe, this);
    38         }
    39     },
    40     onSwipe: function (e) {
    41         if (this.getAllowDirections().indexOf(e.direction) < 0) {
    42             return;
    43         }
    44         var cmp = this.getCmp(),
    45         allowOverflow = this.getAllowOverflow(),
    46         animation = this.getAnimation(),
    47         //获取切换动画效果
    48         direction = e.direction,
    49         //滑动方向
    50         activeItem = cmp.getActiveItem(),
    51         //当前选中项
    52         innerItems = cmp.getInnerItems(),
    53         //所有项
    54         numIdx = innerItems.length - 1,
    55         //最大索引
    56         idx = Ext.Array.indexOf(innerItems, activeItem),
    57         //当前选中项索引
    58         newIdx = idx + (direction === 'left' ? 1 : -1),
    59         //目标索引
    60         newItem;
    61         //处理目标索引,避免出错
    62         if (newIdx < 0) {
    63             if (allowOverflow) {
    64                 newItem = innerItems[numIdx];
    65             }
    66         } else if (newIdx > numIdx) {
    67             if (allowOverflow) {
    68                 newItem = innerItems[0];
    69             }
    70         } else {
    71             newItem = innerItems[newIdx]
    72         }
    73         if (newItem) {
    74             animation = Ext.apply({},
    75             {
    76                 direction: direction
    77             },
    78             animation);
    79             //切换
    80             cmp.animateActiveItem(newItem, animation);
    81             //设置导航滚动
    82             var mun = cmp.getInitialConfig('moveNum'),
    83                 scrollable;
    84             if (mun && mun > 0) {
    85                 scrollable = cmp.getTabBar().getScrollable();
    86                 if (scrollable) {
    87                     scrollable.getScroller().scrollTo(newIdx * mun, 0);
    88                 }
    89             }
    90         }
    91     }
    92 });

    加入左右导航按钮代码:

      1 /*
      2 *为TabPanel加上向左向右按钮
      3 *选项较多时可以滚动
      4 */
      5 Ext.define('ux.PageTab', {
      6     extend: 'Ext.TabPanel',
      7     xtype: 'pageTab',
      8     config: {
      9         //每次移动的距离
     10         moveNum: 41,
     11         //是否循环滚动
     12         allowOverflow: false,
     13         //向右翻页按钮
     14         rightBtn: {
     15             iconMask: true,
     16             iconCls: 'maskIco arrow_right',
     17             name: 'move',
     18             action: 1,
     19             docked: 'right'
     20         },
     21         //向左翻页按钮
     22         leftBtn: {
     23             iconCls: 'maskIco arrow_left',
     24             iconMask: true,
     25             action: -1,
     26             name: 'move',
     27             docked: 'left'
     28         },
     29         //设置横向滚动条
     30         tabBar: {
     31             cls: 'pageTab',
     32             scrollable: {
     33                 direction: 'horizontal',
     34                 //隐藏滚动条样式
     35                 indicators: false
     36             }
     37         }
     38     },
     39     //创建右翻页按钮
     40     applyRightBtn: function (config) {
     41         return Ext.factory(config, Ext.Button, this.getRightBtn());
     42     },
     43     //更新右翻页按钮
     44     updateRightBtn: function (newRightBtn, oldRightBtn) {
     45         this.updateMoveBtn(newRightBtn, oldRightBtn);
     46     },
     47     //创建左翻页按钮
     48     applyLeftBtn: function (config) {
     49         return Ext.factory(config, Ext.Button, this.getLeftBtn());
     50     },
     51     //更新左翻页按钮
     52     updateLeftBtn: function (newLeftBtn, oldLeftBtn) {
     53         this.updateMoveBtn(newLeftBtn, oldLeftBtn);
     54     },
     55     //更新翻页按钮
     56     updateMoveBtn: function (newMoveBtn, oldMoveBtn) {
     57         if (oldMoveBtn) {
     58             this.getTabBar().remove(oldMoveBtn);
     59         }
     60         if (newMoveBtn) {
     61             this.getTabBar().add(newMoveBtn);
     62             newMoveBtn.on({
     63                 scope: this,
     64                 tap: this.onTabMove
     65             });
     66         }
     67     },
     68     //点击翻页按钮执行
     69     onTabMove: function (btn) {
     70         //获取当前项
     71         var activeItem = this.getActiveItem(),
     72         //是否循环滚动
     73         allowOverflow = this.getAllowOverflow(),
     74         //获取所有项
     75         innerItems = this.getInnerItems(),
     76         //获取最大索引
     77         numIdx = innerItems.length - 1,
     78         //获取当前选中项索引
     79         idx = Ext.Array.indexOf(innerItems, activeItem),
     80         //获取点击按钮后索引
     81         newIdx = idx + btn.config.action;
     82         if (newIdx < 0) {
     83             if (!allowOverflow) return;
     84             newIdx = numIdx;
     85         } else if (newIdx > numIdx) {
     86             if (!allowOverflow) return;
     87             newIdx = 0;
     88         }
     89         //选中新项
     90         this.setActiveItem(newIdx);
     91         this.setScroll(newIdx);
     92     },
     93     //选择项
     94     selectView: function (itemId) {
     95         //获取所有项
     96         var me = this, innerItems = me.getInnerItems(), i, ln, item;
     97         for (i = 0, ln = innerItems.length; i < ln; i++) {
     98             item = innerItems[i];
     99             if (item.getItemId() == itemId) {
    100                 me.setActiveItem(item);
    101                 me.setScroll(i);
    102                 break;
    103             }
    104         }
    105     },
    106     //设置滚动条
    107     setScroll: function (newIdx) {
    108         //设置新的滚动位置
    109         var mun = this.getMoveNum();
    110         if (mun && mun > 0) {
    111             var scr = this.getTabBar().getScrollable().getScroller();
    112             scr.scrollTo(newIdx * mun, 0);
    113         }
    114     }
    115 });

    所需css:

     1 .x-tabpanel .pageTab {
     2     padding:0;
     3 }
     4 .pageTab .x-button {
     5     border:0;
     6     padding:0;
     7     background-color:transparent;
     8     background-image:none;
     9 }
    10 .pageTab .x-button .x-button-icon {
    11     width: 1.5em;
    12     margin:0.5em 0;
    13     -webkit-mask-size:auto 100%;
    14     background-color:#EEEFEF;
    15     background-image:none;
    16 }
    17 .pageTab .x-button.x-button-pressing .x-button-icon {
    18     background-color:#2A8BBE;
    19 }

    使用示例:

     1 Ext.define('app.view.action.List', {
     2     alternateClassName: 'actionList',
     3     extend: 'ux.PageTab',
     4     xtype: 'actionList',
     5     requires: ['ux.plugin.SwipeTabs', 'app.view.action.TabList'],
     6     config: {
     7         cls: 'tab',
     8         plugins: 'swipetabs',
     9         items: [{
    10             title: '校园活动',
    11             xtype: 'actionTabList',
    12             store: 'actionCampusList'
    13         },
    14         {
    15             title: '其它活动',
    16             xtype: 'actionTabList',
    17             store: 'actionCampusList'
    18         },
    19         {
    20             title: '讲座报告',
    21             xtype: 'actionTabList',
    22             store: 'actionCampusList'
    23         },
    24         {
    25             title: '公益活动',
    26             xtype: 'actionTabList',
    27             store: 'actionCampusList'
    28         },
    29         {
    30             title: '比赛活动',
    31             xtype: 'actionTabList',
    32             store: 'actionCampusList'
    33         },
    34         {
    35             title: '招聘实习',
    36             xtype: 'actionTabList',
    37             store: 'actionCampusList'
    38         }, {
    39             title: '社团活动',
    40             xtype: 'actionTabList',
    41             store: 'actionCampusList'
    42         }]
    43     }
    44 });

    示例部分css:

     1 .tab {
     2     height:100%;
     3 }
     4 .tab .x-tabbar-dark {
     5     background-image:none;
     6     background-color:#D3DCE3;
     7     padding:0;
     8     border:0;
     9 }
    10 .tab .x-tabbar-dark .x-tab {
    11     color:#677C8B;
    12     border:0;
    13     height:100%;
    14     border-radius:0;
    15     padding:0.8em 0.2em;
    16 }
    17 .tab .x-tabbar-dark .x-tab-active {
    18     background-color:transparent;
    19     background-image:none;
    20     border-bottom:1px solid #00A4FF;
    21     color:#060606;
    22 }

    效果:

    2013.9.6

    优化PageTab内for循环结构

    2014.11.7

    修复bug,适配到2.4.1版本

  • 相关阅读:
    被.net郁闷的一天
    使用批处理出现奇怪的现象
    我们应该更相信ghost
    asp.net设置默认按钮的一种方法(041217更新)
    asp中access到sql server导入升级后要做的工作。
    一种简单方便的权限控制方案
    为何我的本本不能打开休眠功能?
    祝贺自己的blog开张
    sql server中分页获取数据的存储过程
    httpcompress实际效果能有多少?
  • 原文地址:https://www.cnblogs.com/mlzs/p/3235008.html
Copyright © 2020-2023  润新知