Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 简单HTML5画布图像不显示_Javascript_Html_Canvas - Fatal编程技术网

Javascript 简单HTML5画布图像不显示

Javascript 简单HTML5画布图像不显示,javascript,html,canvas,Javascript,Html,Canvas,我是新来的-我只是不明白为什么这不起作用。当我从HTML中删除Display:none时,图像工作正常,因此我知道图像的路径是正确的。但它不是在画布上画的。谢谢你抽出时间 HTML: 如果您试图在加载图像之前将其放置在画布上,它将不会显示。它不像img标签那样在加载时显示图像。我用一个onload包住了你的JS,这对我很有效 document.getElementById("img1").onload = function() { /* Your JS */ }; 在画布上绘制图像之前,必须等

我是新来的-我只是不明白为什么这不起作用。当我从HTML中删除Display:none时,图像工作正常,因此我知道图像的路径是正确的。但它不是在画布上画的。谢谢你抽出时间

HTML:


如果您试图在加载图像之前将其放置在画布上,它将不会显示。它不像img标签那样在加载时显示图像。我用一个onload包住了你的JS,这对我很有效

document.getElementById("img1").onload = function() { /* Your JS */ };

在画布上绘制图像之前,必须等待图像加载,因此请将绘制代码设置为在窗口加载事件(此时所有图像都已加载)上运行。此外,您不需要在页面上包含图像的标记,这样您就必须阻止它使用CSS显示。您只需创建image对象并在javascript中设置source属性。例如:

var img = document.createElement('img');
img.src = 'image/logo.png';
window.addEventListener('load', function(){ 
    var theCanvas = document.getElementById('Canvas6');
    if (theCanvas && theCanvas.getContext) {
        var ctx = theCanvas.getContext("2d");
        if (ctx) {
                ctx.drawImage(img, 0,0);
        }
    }
});

在html文件中,您所做的第一件最好的事情就是在html文件的末尾使用'script'标记。 这可确保最小化“关键渲染时间”,并首先显示HTML中的显示项。(在这种情况下影响不大,因为这里您使用的是JS来绘制/显示,但是当您将JS用于计算等其他目的时,这种方法非常好,并且您不想因为正在进行的计算而停止显示其他HTML项目。)

现在画布已经准备好了,是时候把图像扔到画布上了

尝试使用border属性(style=“border:2px点黑色”)查看画布的容器区域

嗯!!但图像不会显示在画布中。为什么

处理图像(或任何其他文件)至少需要一些时间。当它们被处理并加载到屏幕上时,您的画布已经显示出来了。因此,你会看到一个空画布

因此,解决方案是让其他一切等待,直到图像加载

我们怎么做?只需使用“事件侦听器”

EventListener是窗口对象的属性。(window.addEventListener(“加载”,一些函数要运行,false);)。当我们想让窗口/页面/浏览器等待某些东西时,我们通常会使用它,但是嘿,我们也可以将它用于图像

var cvs=document.getElementById(“canvas”);//获得画布的控制权
var ctx=cvs.getContext(“2d”)//获取对有用的HTML对象getContext的控制。该对象引入了许多有用的方法,如drawImage、fillRect等。
//创建图像
var bg=new Image();//创建图像对象
bg.src=“images/bg.png”//设置源文件
//创建图像结束
//首先加载图像
bg.addEventListener(“加载”,绘制,错误)//**重要提示:只要删除这一行,您将再次面临画布空的问题
//加载图像结束
函数绘图(){
drawImage(bg,0,0);//将图像及其坐标放置在画布上
}
draw();//调用draw函数将图像放到画布上


似乎工作正常。。。嗯,谢谢你看。那么肯定与我的其他JS代码有冲突。@loxxy请使用onDomready而不是onload来尝试它,如果您想更喜欢它,请尝试以下操作:
var img=new Image();img.onload=function(){ctx.drawImage(img,0,0);};img.src=http://www.online-image-editor.com/styles/2013/images/example_image.png'; 
document.getElementById("img1").onload = function() { /* Your JS */ };
var img = document.createElement('img');
img.src = 'image/logo.png';
window.addEventListener('load', function(){ 
    var theCanvas = document.getElementById('Canvas6');
    if (theCanvas && theCanvas.getContext) {
        var ctx = theCanvas.getContext("2d");
        if (ctx) {
                ctx.drawImage(img, 0,0);
        }
    }
});