blowfish/node_modules/outlayer/sandbox/cells-by-row.js
2023-01-29 22:30:24 +00:00

86 lines
2 KiB
JavaScript

/**
* CellsByRow example
*/
( function( window, factory ) {
/* jshint strict: false */ /* globals define, module, require */
if ( typeof define == 'function' && define.amd ) {
// AMD
define( [
'../outlayer'
],
factory );
} else if ( typeof module == 'object' && module.exports ) {
module.exports = factory(
require('../outlayer')
);
} else {
// browser global
window.CellsByRow = factory(
window.Outlayer
);
}
}( window, function factory( Outlayer) {
'use strict';
var CellsByRow = Outlayer.create( 'cellsByRow', {
columnWidth: 100,
rowHeight: 100
});
CellsByRow.prototype._resetLayout = function() {
this.getSize();
this._getMeasurement( 'columnWidth', 'outerWidth' );
this._getMeasurement( 'rowHeight', 'outerHeight' );
var isHorizontal = this._getOption('horizontal');
if ( isHorizontal ) {
this.rows = Math.floor( this.size.innerHeight / this.rowHeight );
this.rows = Math.max( this.rows, 1 );
} else {
this.cols = Math.floor( this.size.innerWidth / this.columnWidth );
this.cols = Math.max( this.cols, 1 );
}
this.itemIndex = 0;
};
CellsByRow.prototype._getItemLayoutPosition = function( item ) {
item.getSize();
var column, row;
var isHorizontal = this._getOption('horizontal');
if ( isHorizontal ) {
row = this.itemIndex % this.rows;
column = Math.floor( this.itemIndex / this.rows );
} else {
column = this.itemIndex % this.cols;
row = Math.floor( this.itemIndex / this.cols );
}
var x = column * this.columnWidth;
var y = row * this.rowHeight;
this.itemIndex++;
return {
x: x,
y: y
};
};
CellsByRow.prototype._getContainerSize = function() {
var isHorizontal = this._getOption('horizontal');
if ( isHorizontal ) {
return {
width: Math.ceil( this.itemIndex / this.rows ) * this.columnWidth
};
} else {
return {
height: Math.ceil( this.itemIndex / this.cols ) * this.rowHeight
};
}
};
return CellsByRow;
}));