canvas如何绘制多张图的排列顺序问题-创新互联-成都快上网建站

canvas如何绘制多张图的排列顺序问题-创新互联

小编给大家分享一下canvas如何绘制多张图的排列顺序问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了巢湖免费建站欢迎大家使用!

在开发中,如果遇到需要使用canvas同时绘制多张图片,但因为图片大小的不一样,排在数组前面的图片不一定能先被load然后绘制,就可能会导致画出来的图的排列顺序和预想的不一样(特别是因为跨域加了域名重定向的图片尤为明显),我的解决办法是:先全部画出来再排序再append到需要的节点里去。

let imgArray = ['img1.png', 'img2.png']; let receiveArray = new Array(); let $myContent = document.getELmentById("myContent"); let {imgW, imgH} = {300, 300}; let Canvas = document.createElement('canvas'); let ctx = Canvas.getContext("2d"); let scaleBy = 2; Canvas.width = imgW * scaleBy; Canvas.height= imgH * scaleBy; imgArray.forEach((e, idx) => {     let img = new Image();     img.src = e;     e.addEventListener('load', () => {         ctx.drawImage(img, 0, 0, imgW * scaleBy, imgH * scaleBy);                  let imgCont = new Image();         imgCont.src = Canvas.toDataURL();         imgCont.id = 'img' + idx;          receiveArray.push(imgCont); // 将绘制的img节点收集到数组里,这里的顺序可能和imgArray的顺序不一样         if (receiveArray.length === imgArray.length) { //所有图片load并绘制完成             let sortArr = new Array();             receiveArray.forEach(ex => { //将所有绘制图片按imgArray顺序排序                 sortArr[ex.id.split('img')[1]] = ex;             })             sortArr.forEach(ex2 => {                 $myContent.appendChild(ex2)             })         }     }) })

其实这也是一种略显无奈的做法,因为无法判断加载图片的实际大小,小的图片会先load并绘制,如果重定向域名后会加大这种现象,采用了绘制完再排序的做法。如果有谁想到更好的办法,欢迎指正批评。

以上是“canvas如何绘制多张图的排列顺序问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


当前标题:canvas如何绘制多张图的排列顺序问题-创新互联
文章位置:http://kswjz.com/article/dehpjd.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流