Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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画布图像不';不要总是装东西_Javascript_Loops_For Loop_If Statement_Canvas - Fatal编程技术网

Javascript画布图像不';不要总是装东西

Javascript画布图像不';不要总是装东西,javascript,loops,for-loop,if-statement,canvas,Javascript,Loops,For Loop,If Statement,Canvas,有时,我的图像在我第一次访问页面时加载,有时我必须刷新才能加载。有时会加载一个图像,而不会加载另一个图像 //Store everything in arrays var dimgs = ["hair-1", "head-1"]; //Name of classes for imgs var cans = ["hairimg", "headimg"]; //Canvas element names var dcans = ["chairimg", "cheadimg"]; //Canvas na

有时,我的图像在我第一次访问页面时加载,有时我必须刷新才能加载。有时会加载一个图像,而不会加载另一个图像

//Store everything in arrays
var dimgs = ["hair-1", "head-1"]; //Name of classes for imgs
var cans = ["hairimg", "headimg"]; //Canvas element names
var dcans = ["chairimg", "cheadimg"]; //Canvas names
var dctxs = ["ctxa", "ctxb"]; //Context names
var defimgs = []; //Images found

//Loop to create Canvas and draw image
for (var p = 0; p < 2; p++) {
    if(p != null) {
       getcan(p);
    }
}

//Function to create Canvas and draw image
function getcan(p) {
    defimgs[p] = document.getElementsByClassName(dimgs[p])[0].getElementsByTagName('img')[0];
    var x;
    if(p != null) {
       defimgs[p].onload = (function(x){
          dcans[x] = document.getElementById(cans[x]);
          dctxs[x] = dcans[x].getContext('2d');
          dcans[x].width = defimgs[x].naturalWidth;
          dcans[x].height = defimgs[x].naturalHeight;
          dctxs[x].drawImage(defimgs[x], 0, 0);
       }(p));
    }
}
//将所有内容存储在数组中
变量dimgs=[“hair-1”,“head-1”]//imgs的类名称
变量cans=[“hairimg”,“headimg”]//画布元素名称
var dcans=[“chairimg”、“cheadimg”]//画布名称
变量dctxs=[“ctxa”,“ctxb”]//上下文名称
var defings=[]//找到的图像
//循环以创建画布并绘制图像
对于(var p=0;p<2;p++){
如果(p!=null){
getcan(p);
}
}
//函数创建画布并绘制图像
函数getcan(p){
defings[p]=document.getElementsByClassName(dimgs[p])[0].getElementsByTagName('img')[0];
var x;
如果(p!=null){
定义[p]。onload=(函数(x){
dcans[x]=document.getElementById(cans[x]);
dctxs[x]=dcans[x].getContext('2d');
dcans[x]。宽度=定义[x]。自然宽度;
dcans[x]。高度=定义[x]。自然高度;
dctxs[x].drawImage(defings[x],0,0);
}(p) );
}
}
我还尝试了以下方法,得到了相同的结果:

//Store everything in arrays
var dimgs = ["hair-1", "head-1"]; //Name of classes for imgs
var cans = ["hairimg", "headimg"]; //Canvas element names
var dcans = ["chairimg", "cheadimg"]; //Canvas names
var dctxs = ["ctxa", "ctxb"]; //Context names
var defimgs = []; //Images found

//Loop to create Canvas and draw image
for (var p = 0; p < 2; p++) {
    if(p != null) {
       defimgs[p] = document.getElementsByClassName(dimgs[p])[0].getElementsByTagName('img')[0];
       dcans[p] = document.getElementById(cans[p]);
       dctxs[p] = dcans[p].getContext('2d');
       dcans[p].width = defimgs[p].naturalWidth;
       dcans[p].height = defimgs[p].naturalHeight;
       getcan(p);
    }
}

//Function to draw image
function getcan(p) {
    var x;
    if(p != null) {
       defimgs[p].onload = (function(x){
          dctxs[x].drawImage(defimgs[x], 0, 0);
       }(p));
    }
}
//将所有内容存储在数组中
变量dimgs=[“hair-1”,“head-1”]//imgs的类名称
变量cans=[“hairimg”,“headimg”]//画布元素名称
var dcans=[“chairimg”、“cheadimg”]//画布名称
变量dctxs=[“ctxa”,“ctxb”]//上下文名称
var defings=[]//找到的图像
//循环以创建画布并绘制图像
对于(var p=0;p<2;p++){
如果(p!=null){
defings[p]=document.getElementsByClassName(dimgs[p])[0].getElementsByTagName('img')[0];
dcans[p]=document.getElementById(cans[p]);
dctxs[p]=dcans[p].getContext('2d');
dcans[p].宽度=定义[p].自然宽度;
dcans[p]。身高=身高[p]。自然身高;
getcan(p);
}
}
//函数来绘制图像
函数getcan(p){
var x;
如果(p!=null){
定义[p]。onload=(函数(x){
dctxs[x].drawImage(defings[x],0,0);
}(p) );
}
}
HTML:



我不知道用< <代码> div < /c> >类将多个图像加载到<<代码> div/<代码>标签中,在<代码>画布>代码> .< /p> < p>您可能需要考虑使用WONDO.OnLoad。此回调仅在页面上的所有图像完成加载后启动,因此在该点处理图像可能会更成功。下面是一个包含更多信息的示例,以及

你可以这样构造它:

window.onload = function() {
    dimgs.forEach(function(img) {
        getcan(img);
    });
}

您在
onload=…
之后执行函数。因此,您分配给onload的内容是这个函数的返回值(
undefined
),您的函数将直接执行(因此可能在图像加载之前)。将试图找到众多的受骗者中的一个…到目前为止似乎有效。非常感谢。
window.onload = function() {
    dimgs.forEach(function(img) {
        getcan(img);
    });
}