JSFiddle - React, Tailwind, and code Playground
by m1erickson
HTML
<button id="fade">Fade to next Image</button><br>
<canvas id="canvas" width=204 height=204></canvas><br>
CSS
body {
background-color: ivory;
}
canvas {
border:1px solid red;
}
JavaScript
$("#fade").hide();
var imageURLs = []; // put the paths to your images here
var imagesOK = 0;
var imgs = [];
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house204-1.jpg");
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house204-2.jpg");
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house204-3.jpg");
imageURLs.push("https://dl.dropboxusercontent.com/u/139992952/stackoverflow/house204-4.jpg");
loadAllImages();
//
function loadAllImages() {
for (var i = 0; i < imageURLs.length; i++) {
var img = new Image();
imgs.push(img);
img.onload = function () {
imagesOK++;
if (imagesOK >= imageURLs.length) {
$("#fade").show();
ctx.drawImage(imgs[0], 0, 0);
}
};
img.onerror = function () {
alert("image load failed");
}
img.crossOrigin = "anonymous";
img.src = imageURLs[i];
}
}
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var fadeOutIndex = imgs.length - 1;
var fadeInIndex = 0;
var fadePct = 0;
function animateFade() {
if (fadePct > 100) {
return;
}
requestAnimationFrame(animateFade);
// ctx.clearRect(0,0,canvas.width,canvas.height);
draw(imgs[fadeInIndex], fadePct / 100);
draw(imgs[fadeOutIndex], (1 - fadePct / 100));
fadePct++;
}
function draw(img, opacity) {
ctx.save();
ctx.globalAlpha = opacity;
ctx.drawImage(img, 0, 0);
ctx.restore();
}
$("#fade").click(function () {
fadePct = 0;
if (++fadeOutIndex == imgs.length) {
fadeOutIndex = 0;
}
if (++fadeInIndex == imgs.length) {
fadeInIndex = 0;
}
animateFade();
});