canvas-resize-flicker

HTML

<div>
    <canvas id="canvas"/>
</div>

<div>
    <input id="width" type="range" min="0" max="500" style="width:500px"/>
</div>

JavaScript

var canvas = document.getElementById('canvas'),
    context = canvas.getContext('2d'),
    slider = document.getElementById('width'),
    width = 400;

context.strokeStyle = 'red';

canvas.width = slider.value = 400;
slider.onchange = function() {
    var tempCanvas = document.createElement('canvas');
    tempCanvas.width = context.canvas.width;
    tempCanvas.height = context.canvas.height;
    var tempContext = tempCanvas.getContext("2d");
    
    tempContext.drawImage(context.canvas, 0, 0);
    canvas.width = parseInt(slider.value);
    context.drawImage(tempContext.canvas, 0, 0);
};

var render = function() {
    context.strokeStyle = 'red';
    var t = new Date().getTime();
    context.clearRect(0, 0, canvas.width, canvas.height);
    context.fillStyle = 'black';
    context.fillRect(0, 0, canvas.width, canvas.height);
    for (var m = 1; m < 5; m++) {
    context.beginPath();
    for (var x = 0; x < canvas.width; x++) {
        var halfHeight = canvas.height/2,
            y = Math.sin((t * m)/500 + x/10)*halfHeight + halfHeight;
        context.lineTo(x, y);
    }
    context.stroke();
    }
};

var animate = function() {
    render();
    window.requestAnimationFrame(animate);
};

animate();