我遇到了JavaScript和Canvas的问题,尤其是在Firefox中。我正在尝试创建一个画布图像查看器,它将在浏览器中启用画布时代替标准img标签运行。单击箭头时,Javascript会更改src路径数组中的图像。出于某种原因,Firefox始终是一个不同步的img。当我在chrome中测试它时,imgs是同步的,但第一个没有显示。
这是图像对象
var image = new Image();
image.src = myImage.src[0];
这是我最初的画布初始化
if(canvas()){ //canvas stuff
var myc = document.createElement('canvas');
myc.id='mycanvasx';
mycanvas = document.getElementById('mycanvasx');
myc.width = image.width;
myc.height = image.height;
//viewer.replaceChild(myc, scroller);
viewer.appendChild(myc);
var context = myc.getContext("2d");
dw = image.width;
dh = image.height;
context.clearRect(0, 0, myc.width, myc.height);
context.drawImage(image, 0, 0, dw, dh);
}
当按下箭头时,这样的函数称为
function update(){
if(canvas()){
context.clearRect(0,0,myc.width, myc.height) //maybe bloat
myc.width = image.width;
myc.height = image.height;
dw = image.width;
dh = image.height;
context.drawImage(image, 0, 0, dw, dh);
}
}
function left(){ //these move the image through the source array
if(myImage.num > 0){myImage.num--;}else{
myImage.num = (myImage.src.length-1)}
image.src = myImage.src[myImage.num];
scroller.src = image.src;
update();
x=0;
}
我知道我必须在这里遗漏一些简单的东西。我正在使用firefox 4.0.1和chrome 11
答案 0 :(得分:3)
您正在设置图像的src,然后立即将其绘制到画布中。但图像加载是异步的。所以你在你设置的新src加载之前绘制它;因为你不断重复使用相同的图像,所以它仍然会显示之前的图像。
您希望update()
上的onload侦听器运行image
。