我们可以通过新的HTML5画布(Canvas)标签添加一个画布到网页中,以下代码用于定义一个 800 x 600 大小的画布。
再通过以下 JavaScript 代码控制在画布中的绘图。
// 通过ID取画布元素 var mc = document.getElementById("MyCanvas"); var ctx = null; // 旋转角度 var rotation = 0; if(mc.getContext) { // 创建 context 对象 ctx = mc.getContext("2d"); // source-over (default) 这是默认设置,新图形会覆盖在原有内容之上。 // destination-over 会在原有内容之下绘制新图形。 // source-in 新图形会仅仅出现与原有内容重叠的部分。其它区域都变成透明的。 // destination-in 原有内容中与新图形重叠的部分会被保留,其它区域都变成透明的。 // source-out 结果是只有新图形中与原有内容不重叠的部分会被绘制出来。 // destination-out 原有内容中与新图形不重叠的部分会被保留。 // source-atop 新图形中与原有内容重叠的部分会被绘制,并覆盖于原有内容之上。 // destination-atop 原有内容中与新内容重叠的部分会被保留,并会在原有内容之下绘制新图形 // lighter两图形中重叠部分作加色处理。 // darker 两图形中重叠的部分作减色处理。 // xor 重叠的部分会变成透明。 // copy 只有新图形会被保留,其它都被清除掉。 // 定义全局合成类型,可以为以上12种方式 ctx.globalCompositeOperation = 'destination-over'; // 定义图片源 var cog = new Image(); // 加载BASE64编码的PNG图片 cog.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAGXRFWHRTb2Z0d2Fy \ ZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABK1JREFUeNqMVt1ZGzkUvVfS4IW1l8GO82w6IBXE7mCpAFMB+Pt4Z6iApALcAe4AU \ 0HoAJfg7BPYHinnXmmciX+y0YdmJHnQ0bk/R5cvh5cUyFPwRD4EChgEvGWMB36R3+JaiTkmD5gOs8yNb25uLlerFf1pM2yIGA \ 82TEY7xow1oj4GBU6S6yywPNG4JwDH+XGv0Whs7ndN8n97mmPsLCSYgy7ImPQE/pFDyAF+7L0fgTNFUDBcLal90taD1doQ/T6 \ NT9DnW8zkT+jJuQVYukG3hifCVk/L3JOxMBa8VVlSp9MhHKLaB+zpNo1fdgEpmByuMqUAV5viOQLwXNax9KBAFNEEpN1pUwnQ \ mvl6aTza6zNjrCKaymeyOdYAMgfg18iG4T/qw+AC94zvpzDjcwqOXo3VGH26H0xMZ7jPxgT0R2zUi4BYt6bAfEbJvJFZKA4OD \ gZ5nhcJLE9mk35X21vWC/TXKmiwr2xszoQd/PQv3t/QCzY2twpqBpb5FKOp+hCgzWaTWq0W1Xx0ij5An9WC5VtiLMwvNBrVaS \ GMvQk5jHQVPN7sb0HzAtE+QJrNgrcUNEARieWCut0ugR0tl8sKcJ5Ahc3jRviPK8ZGTaaBwGKyT+gTiwM4a3Jrba6MbeVXo5F \ 4kp9shn29ndUYC9vLirGDXzRhrYhD8DME5Hkg22df5rDYS/RXmVIsaP/Q/SXs600YnifTjbeSWliEdTYb3QyTqYfdDKTL4B1K \ S6tVqf6SgGq3P9BvZGpvNIrPCgVKZlGlCDQDxJiCjVppCab05DJHzb+b1Gm36X80cVjLuzozexs0f6IgRkA5XRhzIixRL1+Iz \ hwdHVHrn1Y9oXe1i10aKT6bGGhg1CKK+cT0zCGCs0oXTIogybJMw/779/ \ /o48duMvnO9rzLn+Kz8wgS5Shqo4njpCoOQA5Ajb \ 8adHh4SMvVghaLhYb/HsBip88krNVISSEigOlhjmi0LziNhr6wOsgO9C1339vbGznnNAU2AM9Svk235cqKieKGkldAf7DGvTr \ jnjJnzyQoMu0ZTuZgUqvmlYR+f39XIE4uqCX1E/rDZpCYmKwOOmivAfYK9KF1AM7EdG4uAMLAOjmQideQXOJQkyUisqYiFRht \ SFbxCxj8do0T30dmTvLhC+an0MZZVBHX09tBTG4qFigZEJEChjTIEwtRik81Qa7uOQU0IrYAe7FRjqYw6SlYjgAyN1GmHsFIG \ PfVnxzFuFITKEkfYK+oWZ5qKlIkcZ7UE92oXBmeIgIxtAO5UtSHqo9uiLW+sme5ejSIRASeAFR4LYy8MMzL1aq3EYWzJF28Bg \ MEzGYpBkrMKelgl+P6uTcVY8NjLYyYPwMTCcufSaouH6al9xNJcjC82vDb9uVZKbrWIumNO+waVsu1TCC+Wxcg6xaSpsZSYM2 \ wLO9/U8qZWH+wztQnsfAxV/E3MIKZVf1FsmJVV8mamhEmxZ0X7sSsABsGv1tZJGejmptU7FBUDYzPAXQBwFEEl+9+stFEroJE \ ci2ELwIMmZuWoSTE9DYYcWVCjlJrZWMpeBhlAEqBiulPE84S3ixU5gSTwGGOdyEVNJXxA8nPevshwABHktBS1YoQ+QAAAABJR \ U5ErkJggg=='; // 设置定时器 setInterval(draw,10); } // 绘制图片动画 function draw() { // 清空画布 ctx.clearRect(0, 0, 800, 600); // 保存画布状态 ctx.save(); // 移动坐标原点到画布中心 ctx.translate(400, 300); // 增加角度 rotation +=1; // 旋转图片 ctx.rotate(rotation * Math.PI / 180); // 绘制图片 ctx.drawImage(cog, -13.5, -13.5); // 恢复上次保存的画布状态 ctx.restore(); }