diff options
Diffstat (limited to 'animism-align/frontend/views/align/components/ticks.component.js')
| -rw-r--r-- | animism-align/frontend/views/align/components/ticks.component.js | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/animism-align/frontend/views/align/components/ticks.component.js b/animism-align/frontend/views/align/components/ticks.component.js new file mode 100644 index 0000000..3baa1f6 --- /dev/null +++ b/animism-align/frontend/views/align/components/ticks.component.js @@ -0,0 +1,83 @@ +import React, { Component } from 'react' + +import { ZOOM_STEPS, ZOOM_TICK_INTERVAL } from '../constants' +import { timestamp } from '../../../util' + +export default class Ticks extends Component { + render() { + let { start_ts, zoom, duration } = this.props.timeline + start_ts = 65.0 + duration /= 10 + zoom = 2 + const width = window.innerWidth + + let secondsPerPixel = ZOOM_STEPS[zoom] / 10 // 0.1 sec / step + let pixelTimeDuration = 1 / secondsPerPixel // secs per pixel + let widthTimeDuration = width / pixelTimeDuration // secs per pixel + console.log(secondsPerPixel, pixelTimeDuration) + console.log('width in seconds', widthTimeDuration) + + let secondsPerTick = ZOOM_STEPS[zoom] * 10 // secs + let pixelsPerTick = secondsPerTick * pixelTimeDuration + console.log('pixels per tick', pixelsPerTick) + + let labelSpacing = pixelsPerTick + let subdivision = secondsPerTick + while (labelSpacing < 200) { + labelSpacing *= 2 + subdivision *= 2 + } + + console.log('start ts', start_ts) + let pixelOffset = (start_ts / secondsPerPixel) + let pixelRemainder = pixelOffset % labelSpacing + // let startOffset = pixelsPerTick - (startTiming % pixelsPerTick) + let startOffset = labelSpacing - pixelRemainder + let startTiming = (pixelOffset + startOffset) * secondsPerPixel + + let tickCount = Math.ceil(width / labelSpacing) + let offset, timing, tickLabels = [], ticks = [] + for (var i = -1; i < tickCount; i++) { + offset = i * labelSpacing + startOffset + if (offset + 20 > width) continue + timing = i * subdivision + startTiming + if (timing > duration) { + break + } + tickLabels.push( + <div className='tickLabel' key={"tickLabel_" + i} + style={{ + left: Math.floor(offset) + }}> + {timestamp(timing)} + </div> + ) + } + + // tickLabels.push( + // <div className='tickLabel tickLabelTotal' key={"tickLabel_total"} + // style={{ + // left: width + // }}> + // {timestamp(duration, 1)} + // </div> + // ) + // for (var i = 0; i < minuteCount; i += 1) { + // offset = i * labelSpacing + // timing = i * subdivision + // ticks.push( + // <div className='tick' key={"tick_" + i} + // style={{ + // left: Math.floor(offset), + // }} + // /> + // ) + // } + return ( + <div className='ticks'> + {ticks} + {tickLabels} + </div> + ) + } +} |
