i want make image slide effect using html5 canvas. able "slide" image translating canvas , redrawing image. however, during slide process, canvas cleared , left of image redrawn causes flickering along left side if image. here demo link: http://codepen.io/make2514/pen/rlqwbz. below script canvas:
var img = new image(); var imgloaded = false; img.src = "http://in5d.com/wp-content/uploads/2014/11/shmntymetm.jpg" img.onload = function(){ imgloaded = true; }; var canvas = document.queryselector('canvas'); function play() { push(canvas, img, function () { console.log('done'); }); } function push (canvas, canvasin) { var ctx = canvas.getcontext('2d'); ctx.clearrect(0, 0, canvas.width, canvas.height); if (imgloaded) { ctx.translate(5, 0); } ctx.drawimage(img, 0, 0, canvas.width, canvas.height); window.requestanimationframe(function () { push(canvas, img); }); }
i try reduce x-axis canvas translation smaller value flickering still there.
i appreciate suggestion!
you had lot of small bugs in code. defined src
property of image before onload
event, won't ensure fired. push
function run forever, should end image off-screen, presumably. made no use of callback passing push
play
. added callback argument , executed when push
executes final time. had canvas
, canvasin
argument, weren't necessary. hadn't used canvasin
, went referring img
instead. therefore, removed arguments. added xoff
variable keep track of state of canvas know when animation finished.
var img = new image(); var imgloaded = false; img.onload = function () { imgloaded = true; }; img.src = "http://in5d.com/wp-content/uploads/2014/11/shmntymetm.jpg"; var canvas = document.queryselector("canvas"); var xoff = 0; function play() { push(function () { console.log("done"); }); } function push (callback) { var ctx = canvas.getcontext("2d"); ctx.clearrect(0, 0, canvas.width, canvas.height); ctx.translate(5, 0); if (xoff < img.width) { if(imgloaded) { ctx.drawimage(img, 0, 0, canvas.width, canvas.height); } xoff+=5; window.requestanimationframe(function () { push(callback); }); } else { callback(); } }
Comments
Post a Comment