canvas-trading
Version:
Interactive HTML5 Canvas Trading Chart
35 lines (34 loc) • 1.79 kB
JavaScript
import { canvasSettings } from './config';
function scrollZoom(movement, shift, candlesShown, maxCandles, setShift, setCandlesShown) {
maxCandles -= 3;
var newCandlesShown = yMovement(movement, candlesShown, maxCandles, shift, setCandlesShown);
xMovement(movement, shift, newCandlesShown, maxCandles, setShift);
}
function yMovement(movement, candlesShown, maxCandles, shift, setCandlesShown) {
if (movement.y !== 0) {
if ((candlesShown > canvasSettings.minCandlesShown - 1 ||
(candlesShown === canvasSettings.minCandlesShown && movement.y > 0)) &&
(candlesShown < maxCandles - shift + 1 ||
(candlesShown === maxCandles - shift && movement.y < 0))) {
var exponentialMultiplier = Math.max(0.3, candlesShown / maxCandles * 3);
var newCandlesShown = Math.max(Math.min(candlesShown + Math.round(movement.y * exponentialMultiplier * canvasSettings.zoomStrength), maxCandles - shift), canvasSettings.minCandlesShown);
setCandlesShown(newCandlesShown);
return newCandlesShown;
}
}
return candlesShown;
}
function xMovement(movement, shift, candlesShown, maxCandles, setShift) {
if (movement.x !== 0) {
if ((shift > 0 || (shift === 0 && movement.x < 0)) &&
(shift < maxCandles - candlesShown + 1 ||
(shift === maxCandles - candlesShown && movement.x > 0))) {
var exponentialMultiplier = Math.max(0.6, candlesShown / maxCandles * 3);
var newShift = Math.max(Math.min(shift - Math.round(movement.x * exponentialMultiplier * canvasSettings.shiftStrength), maxCandles - candlesShown), 0);
setShift(newShift);
return newShift;
}
}
return shift;
}
export default scrollZoom;