習慣沉默123 2017-06-20 11:02 采纳率: 33.3%
浏览 1404
已采纳

用canvas画地图,批量加载多张瓦片地图,第一次刷新不显示,之后刷新可以,求解!!!

function load(imgX,imgY){ 
    //移动超过一个256,加载多一个图片
    var xLength = imgX/256
    var yLength = imgY/256          

     var x_ze = long2tile(116.402544,zm)-2  //根据中心点算出中心点的行列号,画布左上角(原点)的行号 ;   
     var y_ze = lat2tile(39.913607,zm)-2    //画布左上角(原点)的列号

      for(var y=-Math.floor(yLength)+y_ze;y<6-yLength+y_ze;y++ ){       //原点的列号-移动距离(超过256像素多加载一张图片)
        for(var x=-Math.floor(xLength)+x_ze;x<6-xLength+x_ze;x++ ){         
        var x_ch = x.toString(16)      //转十六进制                
        var y_ch = y.toString(16)      //转十六进制

        var img=new Image()  
        img.src="/seismis/images/map/L0"+zm+"/R00000"+ y_ch+"/C00000"+ x_ch+".png";           

           if(img.complete){              
           drawBeauty(img,x*256-x_ze*256,y*256-y_ze*256);
           console.info("正常加载");
           }
        else{    
           img.onload = function(){
            console.info("图片未加载");
            drawBeauty(img,x*256-x_ze*256,y*256-y_ze*256);
           }
            img.onerror = function(){
              console.info("图片异常")
              drawBeauty(img,x*256-x_ze*256,y*256-y_ze*256);
           };
        }
    }
 }

}//load

  function drawBeauty(img,x,y){      
    ctx.drawImage(img,x+imgX-300,y+imgY-256,256,256); 

 }
  • 写回答

1条回答 默认 最新

  • Go 旅城通票 2017-06-20 11:55
    关注
     img.onload = function(){
                console.info("图片未加载");
                drawBeauty(img,x*256-x_ze*256,y*256-y_ze*256);
               }
                    改为
                    img.onload = function(){
                console.info("图片未加载");
                drawBeauty(this,x*256-x_ze*256,y*256-y_ze*256);////注意是this
               }
    

    要不第一次加载图片从服务器下载需要时间,而img已经是最后一个img了,都是绘制了最后的img。

    加载过后从缓存加载走的是if(img.complete)直接绘制当前图片

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?