InfiniteCarousel

1639 단어 init
Ext.define('Ext.ux.InfiniteCarousel', {	
  extend: 'Ext.Carousel',
  xtype: 'infinitecarousel',
  config: {
    indicator: false
  },
  initConfig: function(){
    var me = this;
    me.callParent(arguments);
    me.delay = me.config.delay;
    delete me.config;
  },
  initialize: function(){
    var me = this;
    me.callParent();
    
    var isEven = function(nb){
        return (nb%2 == 0) ? true : false;
    };
    
    me.nbItems = me.getItems().length;
    me.interval = (isEven(me.nbItems) ? me.nbItems/2 : (me.nbItems-1)/2);
    me.setActiveItem(me.interval);
    
    me.on('activeitemchange', me.onActiveItemChange, me);
    if(me.delay > 0)
      me.timeout = Ext.defer(me.rotate, me.delay, me);
  },
  onActiveItemChange: function(c,v,ov){
    var me = this;
    
    if (me.timeout){
      clearTimeout(me.timeout);
      me.timeout = Ext.defer(me.rotate, me.delay, me);
    }
    
    var active = c.getActiveIndex(),
        direction = (c.getItems().indexOf(v) > c.getItems().indexOf(ov)) ? 'forward' : 'backward',
        container = (direction=='forward') ? c.getAt(active-me.interval-1) : c.getAt(active+me.interval+1);
    
    c.remove(container, false);
    (direction=='forward') ? c.add(container) : c.insert(0,container);
  },
  rotate: function(){
    this.next();
  }
});

좋은 웹페이지 즐겨찾기