Javascript 使用drawImage将加载的图像淡入画布

Javascript 使用drawImage将加载的图像淡入画布,javascript,jquery,html,canvas,drawimage,Javascript,Jquery,Html,Canvas,Drawimage,关于的这个问题已经给出了画布中交叉衰落解决方案的答案。我尝试做同样的事情,唯一的区别是我尝试淡出运行时加载的图像 图像已正确加载,但看不到褪色。这是否因为加载了图像而不起作用?谢谢 HTML 是的,你需要给你的图像时间来加载 但是,jQuery也不能在画布元素上执行fadeIn/fadeout,因此必须手动执行 演示: 代码: 正文{背景色:象牙;} 画布{边框:1px纯红;} $(函数(){ $(“#褪色”).hide(); var imageURLs=[];//将图像的路径放在此处 var

关于的这个问题已经给出了画布中交叉衰落解决方案的答案。我尝试做同样的事情,唯一的区别是我尝试淡出运行时加载的图像

图像已正确加载,但看不到褪色。这是否因为加载了图像而不起作用?谢谢

HTML


是的,你需要给你的图像时间来加载

但是,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;
});