版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/huangyibin628/article/details/30108165

canvas

① 主要作用:绘制矢量图
② 矢量图图形(路径)-(ILL) 位图图像(像素点)- PS中图像都是位图
③ Canvas 可以制作动画,可是不是为了制作动画而生的也可以制作游戏。主要为了画图而生。
④ 可以设置宽高 推荐样式写在style。Canvas 相当于是一个绘制图形的容器,并没有绘制功能,须要借助JS(脚本)实现绘制功能。
思路:
getContext( )
var context = cnvas.getContext('2d');
          // 图像的绘制
          // 開始      beginPath()開始路径
          // 起点     
          // 过程路径
          // 终点
          // 落笔
          // 结束     closePath()结束路径
方法:
beginPath() 開始路径
moveTo(x,y) 把路径移到画布中指定点 不创建路径
lineTo(x,y) 加入一个新点
closePath() 结束路径
fillStyle     用来设置填充颜色
stroke        绘制异地内衣好的路径
fill()      填充已定义好的路径
context.lineWidth = 5
主要书写顺序 先颜色再填充

     <script>
          var cnvas = document.getElementById('cnvas');
          var context = cnvas.getContext('2d');
          context.moveTo(200,100);
          context.lineTo(600,100);
          context.lineTo(600,300);
          context.lineTo(200,300);
          context.lineTo(200,100);
          context.closePath();
          context.fillStyle = 'red';
          context.stroke(); // 描边
          context.fill(); // 填充颜色
     </script>
矩形的绘制:
rect(x,y。w。h) :x y为起始坐标 w,h为矩形的宽 高
fillRect(x。y,w。h):參数同上 与上面差别:上面仅仅绘制,不填充,fillRect()填充
圆形的绘制:
arc(x,y。r,sa,ea。true/false) 
x y为圆心坐标。r为半径,sa ea分别为起始角度和结束角度。最后一个參数为true 顺时针画圆。 false为逆时针画圆
          var cnvas = document.getElementById('cnvas');
          var context = cnvas.getContext('2d');
          for (var i = 0; i < 5; i++) {
               context.beginPath();
               context.strokeStyle = 'red';
               // context.arc(10*Math.pow(2,i),100,10*Math.pow(2,i),0,Math.PI*2,true);
               context.arc(10*i,100,10*i,0,Math.PI*2,true);
               context.stroke();
               context.closePath();
          };
          for (var i = 0; i < 5; i++) {
               context.beginPath();
               context.strokeStyle = 'yellow';
               context.arc(10*Math.pow(2,i),300,10*Math.pow(2,i),0,Math.PI*2,true);
               // context.arc(10*i,100,10*i,0,Math.PI*2,true);
               context.stroke();
               context.closePath();
          };
不加的情况下

context.lineCap = 'round'; 线帽
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.lineCap="round";
ctx.moveTo(20,20);
ctx.lineTo(20,200);
ctx.stroke()
其它參数  context.lineCap="butt|round|square";
贝塞尔曲线
quadraticCurveTo(kx,ky,ex,ey) 二次贝塞尔曲线,一个控制点,一个终点
bezierCurveTo(kx1。ky1,kx2。ky2,ex。ey) 三次贝塞尔曲线, 两个控制点  一个终点
context.clearRect(x,y,w,h); 清画布
产生随机贝塞尔曲线
 <script>
    var cnvas = document.getElementById('cnvas');
    var context = cnvas.getContext('2d');
    context.fillStyle = 'rgba(0,0,0,1)';
    context.fillRect(0,0,800,400);
     // 三个控制点 每个点都须要两个值 这两个点随机
     // 每条线 都须要颜色(rgba) 三个颜色随机
     // setInterval(fun,1000);
     // bezierCurveTo
     // Math.round()  Math.random()
     //
   setInterval(draw,1000);
   function draw () {
      var kx1 = Math.round(Math.random()*700);
      var ky1 = Math.round(Math.random()*350);
      var kx2 = Math.round(Math.random()*750);
      var ky2 = Math.round(Math.random()*400);
      var ex =  Math.round(Math.random()*750);
      var ey =  Math.round(Math.random()*400);
      var colorR = Math.round(Math.random()*255);
      var colorG = Math.round(Math.random()*255);
      var colorB = Math.round(Math.random()*255);
      context.shadowOffsetX = 4; // 阴影Y轴偏移 
      context.shadowOffsetY = 5; // 阴影X轴偏移 
      context.shadowBlur = 6; // 模糊尺寸 
      context.shadowColor = "rgba("+colorG+", "+colorB+", "+colorR+", 0.4)"; // 颜色
      context.fillStyle = 'rgba(0,0,0,1)';
      context.fillRect(0,0,800,400);
      context.beginPath();
      context.fillStyle = 'rgba(0,0,0,0.1)';
      context.fillRect(0,0,800,400);
      context.bezierCurveTo(kx1,ky1,kx2,ky2,ex,ey);
      context.lineWidth = 4;
      context.strokeStyle = "rgb("+colorR+","+colorG+","+colorB+")";
      context.stroke();
      context.closePath();
   }
 </script>
绘制文字:
fillText(text。x,y,maxWidth):text表示文字,x,y为坐标,maxWidth可选,为文字最大宽度,防止文字溢出。填充文字
strokeText(text,x,y,maxWidth):text表示文字,x,y为坐标,maxWidth可选,为文字最大宽度,防止文字溢出,绘制文字
save() restore()
① 绘制复杂图形不可缺少的方法,分别用来保存、恢复canvas的状态,无參数
② sava用于保存canvas状态,save之后,可以调用canvas的平移,缩放,旋转,裁切之类的操作
③ restore用于恢复canvas之前的保存状态,防止save后的操作对兴许绘制造成影响
④ sava和restore配对使用,restore的次数小于等于save
     
阴影属性:

shadowColor:设置阴影颜色

shadowBlur:设置阴影模糊级别

shadowOffsetX:设置阴影在x轴上距离图形的距离

shadowOffsetY:设置阴影在y轴上距离图形的距离

canvas绘制图像 视频  drawImage(img,x,y,width,height) 或者是 drawImage(img,x,y)
【1】  HTML结构:
     <div class="wrap" id="wrap">
          <canvas id='cavas' width=800 height=400></canvas>
          <img src="1.png" alt="" id="img">
     </div> 

JS结构

     context.beginPath();
     context.drawImage(img,60,60,50,50); //  drawImage(img,x,y,width,height)
     context.closePath();

【2】

<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
var img=new Image();
img.src="flower.png";
cxt.drawImage(img,0,0);
</script>
图像的平铺
context.createPattern(image,"repeat|repeat-x|repeat-y|no-repeat");

  img:图片

  type: repeat整个画布平铺

          repeat-x在x轴方向上平铺

          repeat-y在y轴方向上平铺

          no-repeat不平铺
-------------------------------
       var imageObj = new Image();    
       imageObj.src = "1.png";  

       var pattern = context.createPattern(imageObj, "repeat");    
       context.rect(10, 10, cavas.width - 20, cavas.height - 20);           
       context.fillStyle = pattern;    
       context.fill()

   
 

drawImage() 方法在画布上绘制图像、画布或视频。

drawImage() 方法也可以绘制图像的某些部分,以及/或者添加或降低图像的尺寸。

JavaScript 语法 1

在画布上定位图像:

context.drawImage(img,x,y);

JavaScript 语法 2

在画布上定位图像,并规定图像的宽度和高度:

context.drawImage(img,x,y,width,height);

JavaScript 语法 3

剪切图像,并在画布上定位被剪切的部分:

context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);
canvas绘制视频
<script>
  var v=document.getElementById("video1");
  var c=document.getElementById("myCanvas");
  ctx=c.getContext('2d');

  v.addEventListener('play', function() {var i=window.setInterval(function()   {ctx.drawImage(v,0,0,270,135)},20);},false);
  v.addEventListener('pause',function() {window.clearInterval(i);},false);
  v.addEventListener('ended',function() {clearInterval(i);},false);  
</script>

Cavans 渐变
<script type="text/javascript">
var c=document.getElementById("myCanvas");
var cxt=c.getContext("2d");
var grd=cxt.createLinearGradient(0,0,175,50);
grd.addColorStop(0,"#FF0000");
grd.addColorStop(1,"#00FF00");
cxt.fillStyle=grd;
cxt.fillRect(0,0,175,50);
</script>

HTML5 Canvas知识点学习笔记的更多相关文章

  1. Java后端高频知识点学习笔记1---Java基础

    Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...

  2. HTML5移动开发学习笔记之Canvas基础

    1.第一个Canvas程序 看的是HTML5移动开发即学即用这本书,首先学习Canvas基础,废话不多说,直接看第一个例子. 效果图为: 代码如下: <!DOCTYPE html> < ...

  3. HTML5 <canvas> 基础学习

    HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. <canvas> 标签只是图形容器,您必须使用脚本来绘制图形 创建一个画布( ...

  4. 【整理】HTML5游戏开发学习笔记(5)- 猜谜游戏

    距上次学习笔记已有一个多月过去了,期间由于新项目赶进度,以致该学习计划给打断,十分惭愧.书本中的第六章的例子相对比较简单.所以很快就完成. 1.预备知识html5中video标签的熟悉 2.实现思路对 ...

  5. 【整理】HTML5游戏开发学习笔记(1)- 骰子游戏

    <HTML5游戏开发>,该书出版于2011年,似乎有些老,可对于我这样没有开发过游戏的人来说,却比较有吸引力,选择自己感兴趣的方向来学习html5,css3,相信会事半功倍.不过值得注意的 ...

  6. HTML5移动开发学习笔记之CSS3基础学习

    CSS回顾 在学CSS3之前首先巩固下CSS的基础知识. 1.CSS框模型 举例子: #box { width: 70px; margin: 10px; padding: 5px; } 这个代码将出现 ...

  7. html5和css3学习笔记

    HTML5针对移动端,移动端的浏览器主要是chrome,是webkit内核; app(applicatin):应用; native app:原生的app sadsadsadad 单标签可以省略结尾标记 ...

  8. 【html5】html学习笔记1

    html5语法规则 1.标签要小写 2.省略标签 如 <tr> <td> <tr><td> 3.属性不加” 如 <div  id=div1> ...

  9. 【整理】HTML5游戏开发学习笔记(2)- 弹跳球

    1.预备知识(1)在画布上绘制外部图片资源(2)梯度(gradient):HTML5中的对象类型,包括线性梯度和径向梯度.如createLinearGradient,绘制梯度需要颜色组http://w ...

随机推荐

  1. vue项目工具文件utils.js javascript常用工具类,javascript常用工具类,util.js

    vue项目工具文件utils.js :https://blog.csdn.net/Ajaxguan/article/details/79924249 javascript常用工具类,util.js : ...

  2. docker--环境搭建

    我的电脑是win10,虽然现在win10开始也支持docker,但在linux机器会合适些,所以我先用VMware创建一个linux虚拟机--Centos7 安装虚拟机不多说,现在开始安装docker ...

  3. document.createDocumentFragment()的用法

    createDocumentFragment有什么作用呢? 调用多次document.body.append(),每次都要刷新页面一次.效率也就大打折扣了,而使用document_createDocu ...

  4. 面试题: nodejs 的事件轮询机制

    setTimeout(function(){ console.log('setTimeout()执行了') },0) setImmediate(function(){ console.log('set ...

  5. 【转】网站SEO优化中网站的三大标签指的是什么?

    对于很多刚刚接触SEO的新手朋友来说,会经常听到别人提及网站的三大标签.那么,具体什么是网站的三大标签呢?其实网站的三大标签指的就是title.keywords.description,通俗一点也可以 ...

  6. 案例:forEach和some区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 【leetcode】bash脚本练习

    [192]Word Frequency Write a bash script to calculate the frequency of each word in a text file words ...

  8. string::size_type 页73 size_t 页90

    异同点: size_t size_type sizeof(XXX)所得到的结果的类型就是 string类类型和vector类类型定义的类型,string的size操作返回来的是string::size ...

  9. SqlServer 查询的时候过滤条件有参数导致速度很慢的问题-参数嗅探

    何谓SQLSERVER参数嗅探 大家听到“嗅探”这个词应该会觉得跟黑客肯定有关系吧,使用工具嗅探一下参数,然后截获,脱裤o(∩_∩)o . 事实上,我觉得大家太敏感了,其实这篇文章跟数据库安全没有什么 ...

  10. Java中连接MySql数据库的例子

    Java中连接MySql数据库的例子: package com.joinmysql.demo; import java.sql.DriverManager; import java.sql.Resul ...