| 1 | export function forwardWheelToTimeline(event: WheelEvent, timeline: HTMLElement): void { |
| 2 | if (event.defaultPrevented || event.ctrlKey || event.deltaY === 0) return; |
| 3 | event.preventDefault(); |
| 4 | |
| 5 | const forwarded = new WheelEvent("wheel", { |
| 6 | bubbles: true, |
| 7 | cancelable: true, |
| 8 | deltaX: event.deltaX, |
| 9 | deltaY: event.deltaY, |
| 10 | deltaZ: event.deltaZ, |
| 11 | deltaMode: event.deltaMode, |
| 12 | clientX: event.clientX, |
| 13 | clientY: event.clientY, |
| 14 | screenX: event.screenX, |
| 15 | screenY: event.screenY, |
| 16 | altKey: event.altKey, |
| 17 | metaKey: event.metaKey, |
| 18 | shiftKey: event.shiftKey, |
| 19 | }); |
| 20 | if (!timeline.dispatchEvent(forwarded)) return; |
| 21 | |
| 22 | const pixelsPerUnit = |
| 23 | event.deltaMode === WheelEvent.DOM_DELTA_LINE |
| 24 | ? 16 |
| 25 | : event.deltaMode === WheelEvent.DOM_DELTA_PAGE |
| 26 | ? timeline.clientHeight |
| 27 | : 1; |
| 28 | timeline.scrollBy({ top: event.deltaY * pixelsPerUnit }); |
| 29 | } |