diff options
Diffstat (limited to 'src/web/component/timeline/index.js')
| -rw-r--r-- | src/web/component/timeline/index.js | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/src/web/component/timeline/index.js b/src/web/component/timeline/index.js index fa0601b..f83a159 100644 --- a/src/web/component/timeline/index.js +++ b/src/web/component/timeline/index.js @@ -23,43 +23,39 @@ for (let i = 0; i < 10000; ++i) { const zoom = new (class { constructor() { this.committed = 5; - this.count = 5; container.style.gridTemplateColumns = `repeat(5, 1fr)`; - container.classList.toggle('tiling', this.count != 1); + container.classList.toggle('tiling', this.committed != 1); this.por = { x: 0, y: 0 }; this.eor = null; this.y_offset = 0; + this.distance = 0; } - update(delta, point) { - this.count += delta; - this.count = Math.min(Math.max(this.count, 1), 20); - - const scale = this.committed / this.count; - + update(distance, point) { + const scale = distance / this.distance; const x = point.x - this.por.x; - container.style.transform = `translate(${x}px, 0px) scale(${scale})`; } - set point_of_reference(point) { + set reference({ point, distance }) { const rect = container.getClientRects()[0]; this.por = { x: point.x, y: point.y - rect.y }; container.style.transformOrigin = `${this.por.x}px ${this.por.y}px`; this.eor = Z.document.shadowRoot.elementFromPoint(point.x, point.y); - this.y_offset = this.eor.getBoundingClientRect().y; + + const box_rect = this.eor.getBoundingClientRect(); + this.y_offset = box_rect.y; + + this.distance = distance; } - commit() { - console.log('commit'); - this.count = Math.round(this.count); - container.style.gridTemplateColumns = `repeat(${this.count}, 1fr)`; - container.classList.toggle('tiling', this.count != 1); + commit(distance) { + const scale = distance / this.distance; + this.committed = Math.round(Math.min(Math.max(this.committed / scale, 1), 20)); + container.style.gridTemplateColumns = `repeat(${this.committed}, 1fr)`; + container.classList.toggle('tiling', this.committed != 1); container.style.transform = 'scale(1)'; - this.committed = this.count; - - void container.offsetHeight; const rect = this.eor.getBoundingClientRect(); @@ -75,20 +71,19 @@ Z.document.onwheel = (event) => { return; } event.preventDefault(); - zoom.update(event.wheelDeltaY / 120, { x: 0, y: 0 }); - zoom.commit(); + // TODO }; const pinch = new Pinch(Z.document); pinch.onstart = (event) => { - zoom.point_of_reference = event.point; + zoom.reference = event; }; pinch.onpinch = (event) => { - zoom.update(event.zoom_delta / 20, event.point); + zoom.update(event.distance, event.point); }; -pinch.onfinish = () => { - zoom.commit(); +pinch.onfinish = (event) => { + zoom.commit(event.distance); }; |