温故而知新,可以为师矣。 博客:www.ouyangke.com
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <p id="main"></p> <script type="text/javascript"> function GED(ele){return document.getElementById(ele);} function load_source(url,w,h){ this.canvas = document.createElement('canvas'); this.canvas.width = w; this.canvas.height = h; this.ctx = this.canvas.getContext('2d'); this.img = new Image(); this.img.src = url; this.img.onload = function () { this.ctx.drawImage(this.img,0,0); window.ctxs.drawImage(source,110,110); }.bind(this); return this.canvas; } source = new load_source('http://htmljs.b0.upaiyun.com/uploads/1382542991440-2angles.png',300,100); GED('main').appendChild(source); canvas = document.createElement('canvas') canvas.id='ff' canvas.width = 300; canvas.height = 100; GED('main').appendChild(canvas); ctxs= GED('ff').getContext('2d'); </script> </body> </html>
上面這段程式碼是正常的,因為你的圖片在load_source的時候,是透過img.onload非同步畫到load_source裡面的canvas上的,然而,在那段時間之前,img 上是沒有圖像的,所以load_source裡面的canvas也是沒圖像的。
load_source
img.onload
canvas
img
但是,在那個時間之前,DOM裡的canvas已經就緒,而且執行了ctxs.drawImage(source,110,110)。由於此時的load_source裡的canvas還是空的(裡面的圖還沒載入完畢,裡面的畫布也就沒有內容),所以source也就是空的,所以ctx.drawImage(source,110,110) 畫上去的東西也是空的。
ctxs.drawImage(source,110,110)
source
ctx.drawImage(source,110,110)
試試哈下面這段程式碼,感覺是在做課程設計的樣子
<!DOCTYPE html> <html> <head> </head> <body> <p id="main"> <canvas id="myCanvas" width="400px" height="300px" style="border: 1px solid red;"> </canvas> </p> <script type="text/javascript"> var canvas = document.getElementById("myCanvas"); if(canvas.getContext){ //获取对应的CanvasRenderingContext2D对象(画笔) var ctx = canvas.getContext("2d"); //创建新的图片对象 var img = new Image(); //指定图片的URL img.src = "http://htmljs.b0.upaiyun.com/uploads/1382542991440-2angles.png"; //浏览器加载图片完毕后再绘制图片 img.onload = function(){ //以Canvas画布上的坐标(10,10)为起始点,绘制图像 ctx.drawImage(img, 10, 10); }; } </script> </html>
上面這段程式碼是正常的,因為你的圖片在
load_source
的時候,是透過img.onload
非同步畫到load_source
裡面的canvas
上的,然而,在那段時間之前,img
上是沒有圖像的,所以load_source
裡面的canvas也是沒圖像的。但是,在那個時間之前,DOM裡的canvas已經就緒,而且執行了
ctxs.drawImage(source,110,110)
。由於此時的load_source
裡的canvas還是空的(裡面的圖還沒載入完畢,裡面的畫布也就沒有內容),所以source
也就是空的,所以ctx.drawImage(source,110,110)
畫上去的東西也是空的。試試哈下面這段程式碼,感覺是在做課程設計的樣子