31 lines
1016 B
JavaScript
31 lines
1016 B
JavaScript
import { globalLookup } from "../global";
|
|
|
|
const xOffsetUpdate = (pstate, nextOffsetXFn) => {
|
|
let nextOffsetX = nextOffsetXFn();
|
|
const { width, xOffset, xScale, time, sidebarWidth } = pstate;
|
|
const maxTime = globalLookup.maxTime;
|
|
|
|
const maxOffsetX = width + xScale * maxTime * 1.0; // maximum offset
|
|
nextOffsetX = Math.min(nextOffsetX, maxOffsetX);
|
|
|
|
const minOffsetX = - width - xScale * maxTime * 1.0; // minimum offset
|
|
nextOffsetX = Math.max(nextOffsetX, minOffsetX);
|
|
|
|
// 检测 0 是否超出了左侧的 --sidebar-width 的位置
|
|
// 参考公式 xx = Math.round((xCursor - xOffset) / xScale) * tgcd; 带入 xx = 0
|
|
|
|
if (nextOffsetX >= sidebarWidth) {
|
|
nextOffsetX = sidebarWidth - 20;
|
|
}
|
|
|
|
if (nextOffsetX === xOffset) {
|
|
return false; // exit without scroll
|
|
}
|
|
|
|
pstate.oldXOffset = pstate.xOffset;
|
|
pstate.xOffset = nextOffsetX;
|
|
|
|
return true;
|
|
};
|
|
|
|
export default xOffsetUpdate; |