Вы можете создать такой эффект, используя globalAlpha
и два разных объекта холста: один для переднего плана и один для фона.Например, со следующими элементами холста:
<canvas id="bg" width="256" height="256"></canvas>
<canvas id="fg" width="256" height="256"></canvas>
Вы можете скопировать рисовать как текстуру фона, так и размытое движение, скопированное с переднего плана, следующим образом:
bg.globalAlpha = 0.1;
bg.fillStyle = bgPattern;
bg.fillRect(0, 0, bgCanvas.width, bgCanvas.height);
bg.globalAlpha = 0.3;
bg.drawImage(fgCanvas, 0, 0);
Вот это jsFiddle пример этого.
OP спросил, как это сделать с фоном HTML.Поскольку вы не можете сохранить копию фона, вы должны удерживать копии предыдущих кадров и рисовать их все в разных альфа-версиях каждого кадра.Ностальгия: старая видеокарта 3dfx Voodoo 5 имела аппаратную функцию, называемую «t-buffer», которая в основном позволяет использовать эту технику с аппаратным ускорением.
Вот Пример jsFiddle этого стиля.Однако это далеко не так эффективно, как в предыдущем методе.