Skip to content

Instantly share code, notes, and snippets.

@Pamblam
Created July 31, 2019 22:18
Show Gist options
  • Select an option

  • Save Pamblam/763dda44ca6c3b0a38bab31c48acafc5 to your computer and use it in GitHub Desktop.

Select an option

Save Pamblam/763dda44ca6c3b0a38bab31c48acafc5 to your computer and use it in GitHub Desktop.
crossfading image over canvas
<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<canvas id="main_canvas" width="500" height="300"></canvas>
<script>
var canvas = document.getElementById('main_canvas');
var img = new Image();
img.onload = function(){
canvas.getContext('2d').drawImage(img, 0, 0);
fadeTo(canvas, "2.jpg").then(()=>console.log("farts"));
};
img.src = "1.jpg";
function fadeTo(canvas, imguri, x=0, y=0){
const loadImg = uri => new Promise(done=>{
var img = new Image();
img.onload = ()=>done(img);
img.src = uri;
});
return new Promise(async done => {
var first_canvas = document.createElement('canvas');
first_canvas.width = canvas.width;
first_canvas.height = canvas.height;
var first = first_canvas.getContext('2d');
var first_img = await loadImg(canvas.toDataURL());
var next_canvas = document.createElement('canvas');
next_canvas.width = canvas.width;
next_canvas.height = canvas.height;
var next = next_canvas.getContext('2d');
var next_img = await loadImg(imguri);
var ctx = canvas.getContext('2d');
var opacity = 1;
const fade = ()=>{
opacity -= .02;
first.clearRect(0, 0, canvas.width, canvas.height);
first.globalAlpha = opacity;
first.drawImage(first_img, 0, 0);
next.clearRect(0, 0, canvas.width, canvas.height);
next.globalAlpha = 1 - opacity;
next.drawImage(next_img, x, y);
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(first_canvas, 0, 0);
ctx.drawImage(next_canvas, 0, 0);
if (opacity <= 0) return done();
else requestAnimationFrame(fade);
};
fade();
});
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment