JSFiddle - React, Tailwind, and code Playground
HTML
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<canvas id="canvas" height="400" width="500"> </canvas>
<script src="app.js"></script>
</body>
</html>
JavaScript
let y = null
const canvas = document.querySelector('#canvas');
const ctx = canvas.getContext('2d');
ctx.strokeStyle = 'red';
ctx.lineCap = 'round';
ctx.lineJoin = 'round'
ctx.lineWidth = 5;
const width = ctx.canvas.width
const height = ctx.canvas.height
let prevY = null;
const onMouseUpdate = (e) => {
y = e.pageY;
}
const shift = 10
canvas.addEventListener('mousemove', onMouseUpdate, false);
canvas.addEventListener('mouseenter', onMouseUpdate, false);
let xOff = 0
function draw() {
const rect = canvas.getBoundingClientRect()
const yTarget = y - rect.top
ctx.beginPath()
ctx.moveTo(width - shift, prevY);
ctx.lineTo(width, yTarget);
ctx.stroke();
prevY = yTarget
const imageData = ctx.getImageData(shift, 0, width - shift, height);
ctx.putImageData(imageData, 0, 0);
ctx.clearRect(width - shift, 0, shift, height);
}
setInterval(draw, 300)