博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于html5画布(canvas)
阅读量:5361 次
发布时间:2019-06-15

本文共 4166 字,大约阅读时间需要 13 分钟。

canvas:用于绘制图像(通过脚本,通常是 JavaScript)。元素本身并没有绘制能力(它仅仅是图形的容器) 您必须使用脚本来完成实际的绘图任务.

getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。
常用属性:
fillStyle: 设置或返回用于填充绘画的颜色、渐变或模式 
strokeStyle: 设置或返回用于笔触的颜色、渐变或模式 
shadowColor: 设置或返回用于阴影的颜色 
shadowBlur:设置或返回用于阴影的模糊级别 
font: 设置或返回文本内容的当前字体属性 
textAlign: 设置或返回文本内容的当前对齐方式 
 常用方法:
createLinearGradient() 创建线性渐变(用在画布内容上) 
createPattern() 在指定的方向上重复指定的元素 
lineWidth 设置或返回当前的线条宽度 
rect() 创建矩形 
fillRect() 绘制“被填充”的矩形 
strokeRect() 绘制矩形(无填充) 
clearRect() 在给定的矩形内清除指定的像素 
fill() 填充当前绘图(路径) 
stroke() 绘制已定义的路径 
beginPath() 起始一条路径,或重置当前路径 
moveTo() 把路径移动到画布中的指定点,不创建线条 
closePath() 创建从当前点回到起始点的路径 
lineTo() 添加一个新点,然后在画布中创建从该点到最后指定点的线条 
quadraticCurveTo() 创建二次贝塞尔曲线 
bezierCurveTo() 创建三次方贝塞尔曲线 
arc() 创建弧/曲线(用于创建圆形或部分圆) 
scale() 缩放当前绘图至更大或更小 
rotate() 旋转当前绘图 
translate() 重新映射画布上的 (0,0) 位置 
fillText() 在画布上绘制“被填充的”文本 
strokeText() 在画布上绘制文本(无填充) 
createImageData() 创建新的、空白的 ImageData 对象 
getImageData() 返回 ImageData 对象,该对象为画布上指定的矩形复制像素数据 
save() 保存当前环境的状态 
restore() 返回之前保存过的路径状态和属性 
-------------------
利用画布和javascript我们可以实现很多动画效果,虽然css+javascript也可以实现动画的效果,但是css+javascript执行效率没有画布和javascript高,由于css+javascript每执行一次,都会刷新一次页面,页面整个内容会加载一次。但是画布+javascript不会,每次都是从新加载画布的内容,真个页面的布局不会打乱。所以从执行效率来说,还是画布和javascript有优势。

下面是用画布和javascript结合做的一个动画效果:

<!DOCTYPE html>
  <html>
  <head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <style>
  *{margin: 0;padding: 0}
  body{
  text-align: center;
  }
  canvas{
  margin: 20px auto;
  border: 1px solid;
  }
  audio{
  position: absolute;
  top: 100px;
  left: 950px;
  }
  </style>
  </head>
  <body>
  <canvas id="myCanvas" width="900" height="600"></canvas>
  <audio src="" controls="controls" autoplay="autoplay">你的浏览器不支持音频播放</audio>
  </body>
  <script>
  var c=document.getElementById("myCanvas");
  var cxt=c.getContext("2d");
  back();
  id1=setTimeout("head()",10);
  id2=setTimeout("body()",1000);
  id3=setTimeout("hand()",2000);
  id4= setTimeout("foot()",3000);
  id5=setTimeout("feeler()",4000);
  id6=setTimeout("shan()",6000);
   
  function back(){
   
  cxt.fillStyle="black";
  cxt.beginPath();
  cxt.fillRect(250,50,400,500);
  cxt.closePath();
   
   
  }
  function head(){
   
  cxt.fillStyle="#5acc42";
  cxt.beginPath();
  cxt.arc(450,200,100,Math.PI,2*Math.PI);
  cxt.closePath();
  cxt.fill();
  cxt.fillStyle="black";
  cxt.beginPath();
  cxt.arc(410,150,12,0,2*Math.PI);
  cxt.arc(490,150,12,0,2*Math.PI);
  cxt.closePath();
  cxt.fill();
   
   
  }
  function body(){
   
  cxt.fillStyle="#5acc42";
  cxt.beginPath();
  cxt.fillRect(350,220,200,180);
  cxt.closePath();
   
  cxt.beginPath();
  cxt.fillRect(370,400,160,20);
  cxt.closePath();
   
  cxt.beginPath();
  cxt.arc(370,400,20,0,2*Math.PI);
  cxt.arc(530,400,20,0,2*Math.PI);
  cxt.closePath();
  cxt.fill();
   
  }
   
  function hand(){
  cxt.fillStyle="#5acc42";
  cxt.beginPath();
  cxt.fillRect(290,250,40,100);
  cxt.fillRect(570,250,40,100);
  cxt.closePath();
   
  cxt.beginPath();
  cxt.arc(310,250,20,0,2*Math.PI);
  cxt.arc(310,350,20,0,2*Math.PI);
  cxt.closePath();
  cxt.fill();
   
  cxt.beginPath();
  cxt.arc(590,250,20,0,2*Math.PI);
  cxt.arc(590,350,20,0,2*Math.PI);
  cxt.closePath();
  cxt.fill();
   
  }
   
  function foot(){
  cxt.fillStyle="#5acc42";
  cxt.beginPath();
  cxt.fillRect(380,419,40,80);
  cxt.fillRect(480,419,40,80);
  cxt.closePath();
   
  cxt.beginPath();
  cxt.arc(400,500,20,0,2*Math.PI);
  cxt.closePath();
  cxt.fill();
   
  cxt.beginPath();
  cxt.arc(500,500,20,0,2*Math.PI);
  cxt.closePath();
  cxt.fill();
   
  }
   
  function feeler(){
  cxt.fillStyle="#5acc42";
  cxt.beginPath();
  cxt.save();
  cxt.translate(390,75);
  cxt.rotate(-30*Math.PI/180);
  cxt.fillRect(-20,0,8,40);
  cxt.closePath();
  cxt.beginPath();
  cxt.arc(-16,0,4,0,2*Math.PI);
  cxt.closePath();
  cxt.restore();
  cxt.fill();
   
  cxt.beginPath();
  cxt.save();
  cxt.translate(500,75);
  cxt.rotate(30*Math.PI/180);
  cxt.fillRect(20,-5,8,40);
  cxt.closePath();
  cxt.beginPath();
  cxt.arc(24,-5,4,0,2*Math.PI);
  cxt.closePath();
  cxt.restore();
  cxt.fill();
  }
   
  function shan(){
  cxt.clearRect(250,50,400,500);
  back();
  clearTimeout(id1);
  clearTimeout(id2);
  clearTimeout(id3);
  clearTimeout(id4);
  clearTimeout(id5);
  clearTimeout(id6);
  setTimeout("shan1()",500);
  }
  function shan1(){
  clearTimeout(id1);
  clearTimeout(id2);
  clearTimeout(id3);
  clearTimeout(id4);
  clearTimeout(id5);
  clearTimeout(id6);
  head();
  body();
  hand();
  foot();
  feeler();
   
  setTimeout("shan()",1000);
  }
   
   
  </script>
  </html>

 

转载于:https://www.cnblogs.com/ddzhao1989/p/4641841.html

你可能感兴趣的文章
5.6.3.7 localeCompare() 方法
查看>>
Linux下好用的简单实用命令
查看>>
描绘应用程序级的信息
查看>>
poj2406-Power Strings
查看>>
php环境搭建脚本
查看>>
FTP主动模式与被动模式说明
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>