Simplest Slideshow In Html5 Canvas, Canvas.context.clearrect Not Working With Settimeout
Here is a code of a very simple slideshow, that should show 4 images in 4 seconds, one image per second. Instead, I get a 4-second delay and then all the images get drawn on top of
Solution 1:
You have a few issues with that, including naming your image variables wrong.
Try this:
// 4 imagesvar image0 = newImage();
image0.src = "http://placekitten.com/200/300";
var image1 = newImage();
image1.src = "http://placekitten.com/205/305";
var image2 = newImage();
image2.src = "http://placekitten.com/300/400";
var image3 = newImage();
image3.src = "http://placekitten.com/800/600";
// array of 4 images
images = newArray(image0, image1, image2, image3);
// global counter and canvasvar counter = 0, ctx, interval;
// this is the main functionfunctiondraw(){
myCanvas = document.getElementById('myCanvas');
ctx = myCanvas.getContext('2d');
interval = setInterval(draw_next_image, 1000);
}
// this is the function called after each timeout to draw next imagefunctiondraw_next_image(){
ctx.clearRect(0, 0, myCanvas.width, myCanvas.height);
ctx.drawImage(images[counter], 0, 0);
counter++;
if (counter==images.length) {counter=0;}
}
window.onload = draw;
See: http://jsfiddle.net/8c9MM/1/ for example. You can also pause the slideshow since we're assigning interval to the setInterval()
function
Solution 2:
How about this.
HTML
<!DOCTYPE HTML><html><head><title>Slider</title><metacharset="utf-8"><linktype="text/css"rel="stylesheet"href="css/main.css"></head><body><canvasid="canvas"width="600"height="400"></canvas><scripttype="text/javascript"src="js/slider.js"></script></body></html>
Javascript
// The 3 imagesvar im1 = newImage();
im1.src = "img/kitten1.jpg";
var im2 = newImage();
im2.src = "img/kitten2.jpg";
var im3 = newImage();
im3.src = "img/kitten3.jpg";
// Starting position of the 3 imagesvar x1 = 0;
var x2 = -600;
var x3 = -1200;
var counter = 0;
var img_count = 0;
// Canvas
canvas = document.getElementById("canvas");
ctx = canvas.getContext("2d");
//This draws the first image when the page is loaded
ctx.drawImage(im1, x1, 0);
functionsliderMove() {
if(counter <= 590) {
x1+=10;
ctx.drawImage(im1,x1,0);
x2+=10;
ctx.drawImage(im2,x2,0);
x3+=10;
ctx.drawImage(im3,x3,0);
counter+=10;
}
else {
counter = 0;
img_count++
if(img_count == 1) {
x1 = -1200;
}elseif(img_count == 2) {
x2 = -1200;
}elseif(img_count == 3) {
x3 = -1200;
}
// This stops move_loop once counter gets to 600clearInterval(move_loop);
}
}
functionmoveImg() {
//This part moves all of the images 20px to the right every 10ms
move_loop = setInterval(sliderMove, 10);
if(img_count > 2) {
img_count = 0;
}
}
// This executes the moveImg function every 5 seconds
image_loop = setInterval(timer, 5000);
Sorry if the codes not very organized. This is the first time that I have created anything with javascript.
Post a Comment for "Simplest Slideshow In Html5 Canvas, Canvas.context.clearrect Not Working With Settimeout"