vscroll
Version:
Virtual scroll engine
73 lines • 2.23 kB
JavaScript
import { Direction } from '../inputs/index';
export class Padding {
constructor(direction, routines) {
const found = routines.findPaddingElement(direction);
routines.checkElement(found);
this.element = found;
this.direction = direction;
this.routines = routines;
}
reset(size) {
this.size = size || 0;
}
get size() {
return this.routines.getSizeStyle(this.element);
}
set size(value) {
this.routines.setSizeStyle(this.element, value);
}
}
export class Paddings {
constructor(routines, settings) {
this.settings = settings;
this.forward = new Padding(Direction.forward, routines);
this.backward = new Padding(Direction.backward, routines);
}
byDirection(direction, opposite) {
return direction === Direction.backward
? (opposite ? this.forward : this.backward)
: (opposite ? this.backward : this.forward);
}
reset(viewportSize, startIndex, offset) {
const positive = this.getPositiveSize(startIndex, viewportSize, offset);
const negative = this.getNegativeSize(startIndex);
if (this.settings.inverse) {
this.forward.reset(negative);
this.backward.reset(positive);
const diff = viewportSize - this.backward.size - offset;
if (diff > 0) {
this.backward.size += diff;
this.forward.size -= diff;
}
}
else {
this.forward.reset(positive);
this.backward.reset(negative);
const diff = viewportSize - this.forward.size - offset;
if (diff > 0) {
this.backward.size -= diff;
this.forward.size += diff;
}
}
}
getPositiveSize(startIndex, viewportSize, offset) {
const { settings } = this;
let positiveSize = viewportSize;
if (isFinite(settings.maxIndex)) {
positiveSize = (settings.maxIndex - startIndex + 1) * settings.itemSize;
}
if (offset) {
positiveSize = Math.max(positiveSize - offset, 0);
}
return positiveSize;
}
getNegativeSize(startIndex) {
const { settings } = this;
let negativeSize = 0;
if (isFinite(settings.minIndex)) {
negativeSize = (startIndex - settings.minIndex) * settings.itemSize;
}
return negativeSize;
}
}
//# sourceMappingURL=paddings.js.map