Javascript 使用drawImage将加载的图像淡入画布
关于的这个问题已经给出了画布中交叉衰落解决方案的答案。我尝试做同样的事情,唯一的区别是我尝试淡出运行时加载的图像 图像已正确加载,但看不到褪色。这是否因为加载了图像而不起作用?谢谢 HTMLJavascript 使用drawImage将加载的图像淡入画布,javascript,jquery,html,canvas,drawimage,Javascript,Jquery,Html,Canvas,Drawimage,关于的这个问题已经给出了画布中交叉衰落解决方案的答案。我尝试做同样的事情,唯一的区别是我尝试淡出运行时加载的图像 图像已正确加载,但看不到褪色。这是否因为加载了图像而不起作用?谢谢 HTML 是的,你需要给你的图像时间来加载 但是,jQuery也不能在画布元素上执行fadeIn/fadeout,因此必须手动执行 演示: 代码: 正文{背景色:象牙;} 画布{边框:1px纯红;} $(函数(){ $(“#褪色”).hide(); var imageURLs=[];//将图像的路径放在此处 var
是的,你需要给你的图像时间来加载 但是,jQuery也不能在画布元素上执行fadeIn/fadeout,因此必须手动执行 演示: 代码:
正文{背景色:象牙;}
画布{边框:1px纯红;}
$(函数(){
$(“#褪色”).hide();
var imageURLs=[];//将图像的路径放在此处
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(){
for(var i=0;i=imageURL.length){
$(“#褪色”).show();
ctx.drawImage(imgs[0],0,0);
}
};
img.onerror=function(){alert(“映像加载失败”);}
img.crossOrigin=“匿名”;
img.src=imageURL[i];
}
}
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var fadeOutIndex=imgs.length-1;
var fadeInIndex=0;
var-fadePct=0;
函数animateFade(){
如果(fadePct>100){return;}
requestAnimationFrame(animateFade);
clearRect(0,0,canvas.width,canvas.height);
绘制(imgs[FADEINININDEX],fadePct/100);
绘制(imgs[衰减指数],(1-fadePct/100));
fadePct++;
}
函数绘制(img,不透明度){
ctx.save();
ctx.globalAlpha=不透明度;
ctx.drawImage(img,0,0);
ctx.restore();
}
$(“#淡入”)。单击(函数(){
fadePct=0;
如果(++fadeOutIndex==imgs.length){fadeOutIndex=0;}
如果(++fadeInIndex==imgs.length){fadeInIndex=0;}
animateFade();
});
}); // end$(函数(){});
淡入下一幅图像
是的,你需要给你的图像时间来加载
但是,jQuery也不能在画布元素上执行fadeIn/fadeout,因此必须手动执行
演示:
代码:
正文{背景色:象牙;}
画布{边框:1px纯红;}
$(函数(){
$(“#褪色”).hide();
var imageURLs=[];//将图像的路径放在此处
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(){
for(var i=0;i=imageURL.length){
$(“#褪色”).show();
ctx.drawImage(imgs[0],0,0);
}
};
img.onerror=function(){alert(“映像加载失败”);}
img.crossOrigin=“匿名”;
img.src=imageURL[i];
}
}
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var fadeOutIndex=imgs.length-1;
var fadeInIndex=0;
var-fadePct=0;
函数animateFade(){
如果(fadePct>100){return;}
requestAnimationFrame(animateFade);
clearRect(0,0,canvas.width,canvas.height);
绘制(imgs[FADEINININDEX],fadePct/100);
绘制(imgs[衰减指数],(1-fadePct/100));
fadePct++;
}
函数绘制(img,不透明度){
ctx.save();
ctx.globalAlpha=不透明度;
ctx.drawImage(img,0,0);
ctx.restore();
}
$(“#淡入”)。单击(函数(){
fadePct=0;
如果(++fadeOutIndex==imgs.length){fadeOutIndex=0;}
如果(++fadeInIndex==imgs.length){fadeInIndex=0;}
animateFade();
});
}); // end$(函数(){});
淡入下一幅图像
尝试直接在画布上淡入/淡出图像,而不是淡入/淡出画布元素(或者使用画布实际上没有任何意义,因为您可以使用图像元素代替)
当然,首先要等待图像加载:
var isBusy = false, /// for fade loop
count = 2; /// number of images to load
image = new Image();
image2 = new Image();
/// setup load handler
image.onload = image2.onload = handleLoad;
image.src = 'download1.jpg';
image2.src = 'download2.jpg';
function handleLoad() {
count--;
if (count === 0) {
/// when loaded draw a single image onto canvas
ctx.drawImage(image, 0, 0, ctx.canvas.width, ctx.canvas.height);
}
};
现在,我们可以稍微更改一下单击处理程序,只使用canvas淡入下一幅图像:
$('#wrapper').click(function () {
var img, /// current image to fade in
opacity = 0; /// current globalAlpha of canvas
/// if we're in a fade exit until done
if (isBusy) return;
isBusy = true;
/// what image to use
img = toggle ? image2 : image;
/// fade in
(function fadeIn() {
/// set alpha
ctx.globalAlpha = opacity;
/// draw image with current alpha
ctx.drawImage(img, 0, 0, ctx.canvas.width, ctx.canvas.height);
/// increase alpha to 1, then exit resetting isBusy flag
opacity += 0.02;
if (opacity < 1)
requestAnimationFrame(fadeIn);
else
isBusy = false;
})();
toggle = !toggle;
});
$('#包装器')。单击(函数(){
var img,///要淡入的当前图像
不透明度=0;///画布的当前全局Alpha
///如果我们在淡出状态直到完成
如果(忙)返回;
isBusy=true;
///使用什么图像
img=切换?图像2:图像;
///淡入
(功能fadeIn(){
///设定阿尔法
ctx.globalAlpha=不透明度;
///使用当前alpha绘制图像
drawImage(img,0,0,ctx.canvas.width,ctx.canvas.height);
///将alpha增加到1,然后退出重置isBusy标志
不透明度+=0.02;
如果(不透明度<1)
请求动画帧(fadeIn);
其他的
isBusy=false;
})();
切换=!切换;
});
希望这有帮助。尝试直接在画布上淡入/淡出图像,而不是淡入/淡出画布元素(或者使用画布没有任何意义,因为您可以使用图像元素代替) 当然,首先要等待图像加载:
var isBusy = false, /// for fade loop
count = 2; /// number of images to load
image = new Image();
image2 = new Image();
/// setup load handler
image.onload = image2.onload = handleLoad;
image.src = 'download1.jpg';
image2.src = 'download2.jpg';
function handleLoad() {
count--;
if (count === 0) {
/// when loaded draw a single image onto canvas
ctx.drawImage(image, 0, 0, ctx.canvas.width, ctx.canvas.height);
}
};
现在,我们可以稍微更改一下单击处理程序,只使用canvas淡入下一幅图像:
$('#wrapper').click(function () {
var img, /// current image to fade in
opacity = 0; /// current globalAlpha of canvas
/// if we're in a fade exit until done
if (isBusy) return;
isBusy = true;
/// what image to use
img = toggle ? image2 : image;
/// fade in
(function fadeIn() {
/// set alpha
ctx.globalAlpha = opacity;
/// draw image with current alpha
ctx.drawImage(img, 0, 0, ctx.canvas.width, ctx.canvas.height);
/// increase alpha to 1, then exit resetting isBusy flag
opacity += 0.02;
if (opacity < 1)
requestAnimationFrame(fadeIn);
else
isBusy = false;
})();
toggle = !toggle;
});
$('#包装器')。单击(函数(){
var img,///要淡入的当前图像
不透明度=0;///画布的当前全局Alpha
///如果我们陷入困境
$('#wrapper').click(function () {
var img, /// current image to fade in
opacity = 0; /// current globalAlpha of canvas
/// if we're in a fade exit until done
if (isBusy) return;
isBusy = true;
/// what image to use
img = toggle ? image2 : image;
/// fade in
(function fadeIn() {
/// set alpha
ctx.globalAlpha = opacity;
/// draw image with current alpha
ctx.drawImage(img, 0, 0, ctx.canvas.width, ctx.canvas.height);
/// increase alpha to 1, then exit resetting isBusy flag
opacity += 0.02;
if (opacity < 1)
requestAnimationFrame(fadeIn);
else
isBusy = false;
})();
toggle = !toggle;
});