123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- Ext.require([
- 'Ext.XTemplate',
- 'Ext.util.KeyNav',
- 'Ext.fx.*'
- ]);
- Ext.define('Board', {
- constructor: function(size, activeCls){
- this.size = size;
- this.activeCls = activeCls;
- },
- render: function(el){
- el = Ext.get(el);
- var tpl = Ext.create('Ext.XTemplate',
- '<tpl for=".">',
- '<div class="square">{.}</div>',
- '<tpl if="xindex % ' + this.size + ' === 0"><div class="x-clear"></div></tpl>',
- '</tpl>'),
- data = [],
- i = 0,
- max = this.size * this.size;
- for (; i < max; ++i) {
- data.push(i + 1);
- }
- tpl.append(el, data);
- this.cells = el.select('.square');
- },
- getIndex: function(xy){
- return this.size * xy[0] + xy[1];
- },
- constrain: function(x, y) {
- x = Ext.Number.constrain(x, 0, this.size - 1);
- y = Ext.Number.constrain(y, 0, this.size - 1);
- return [x, y];
- },
- setActive: function(x, y) {
- var xy = this.constrain(x, y),
- cell = this.cells.item(this.getIndex(xy));
- cell.radioCls(this.activeCls);
- this.active = xy;
- },
- setActiveCls: function(activeCls){
- this.cells.removeCls(this.activeCls);
- this.activeCls = activeCls;
- var active = this.active;
- this.setActive(active[0], active[1]);
- },
- highlightActive: function(){
- var cell = this.cells.item(this.getIndex(this.active));
- Ext.create('Ext.fx.Anim', {
- target: cell,
- duration: 1000,
- alternate: true,
- iterations: 2,
- to: {
- backgroundColor: '#FFFF00'
- },
- callback: function(){
- cell.setStyle('background-color', '');
- }
- });
- },
- moveUp: function(){
- var active = this.active;
- this.setActive(active[0] - 1, active[1]);
- },
- moveDown: function(){
- var active = this.active;
- this.setActive(active[0] + 1, active[1]);
- },
- moveLeft: function(){
- var active = this.active;
- this.setActive(active[0], active[1] - 1);
- },
- moveRight: function(){
- var active = this.active;
- this.setActive(active[0], active[1] + 1);
- }
- });
- Ext.onReady(function(){
- var cls = 'active-green';
- var board = new Board(4, cls);
- board.render('board');
- board.setActive(0, 0);
- var nav = Ext.create('Ext.util.KeyNav', Ext.getDoc(), {
- scope: board,
- left: board.moveLeft,
- up: board.moveUp,
- right: board.moveRight,
- down: board.moveDown,
- space: board.highlightActive,
- home: function(){
- cls = Ext.String.toggle(cls, 'active-green', 'active-red');
- board.setActiveCls(cls);
- }
- });
- });
|