当前位置: 首页 > news >正文

html5新增特性之画布canvas的使用

目录

一、基本用法

二、canvas的使用

1、绘制一个矩形

填充矩形

轮廓矩形

2、清除画布区域 

3、绘制一个圆

填充圆

轮廓圆

会移动的圆

4、渐变色绘制

线性渐变

径向渐变

5、绘制线段

绘制一个三角形

6、绘制图片

7、绘制视频 

8、绘制文本

一、基本用法

1、获取canvas对象——获取画布
    通过document.getElementById()等方法取得canvas对象。

var canvas = document.querySelector('canvas');

2、取得上下文(context)——获取画笔
    图形上下文是一个封装了很多绘图功能的对象,参数只能是“2d”

var context = canvas.getContext('2d');

3、定义填充样式

实心填充样式:

context.fillStyle='pink';

轮廓样式: 

context.strokeStyle = 'pink'

4、绘制填充图形

绘制填充图形:

context.fill();

绘制边框图形:

context.stroke();

绘制填充矩形:

//第一个参数是x轴开始位置,第二个参数是y轴开始位置,第三个参数是绘制图形的宽,第四个位置是绘制图形的高
context.fillRect(10,10,100,100)

 绘制轮廓矩形:

//第一个参数是x轴开始位置,第二个参数是y轴开始位置,第三个参数是绘制图形的宽,第四个位置是绘制图形的高
context.strokeRect(20, 20, 200, 200)

二、canvas的使用

1、绘制一个矩形

填充矩形

(1)获取画布

(2)获取画笔

(3)给图像设置填充样式

(4)绘制图形

<body>
  <!-- 画布元素-->
  <canvas width="400px" height="400px"></canvas>
  <script>
    //1、获取画布
    var canvas = document.querySelector('canvas')
    //2、获取画笔
    var context = canvas.getContext('2d')
    //3、给图形设置填充样式
    context.fillStyle = 'pink' //实心填充
    //4、绘制图形
    //fillRect有4个参数:x轴起始位置,y轴起始位置,宽,高 
    context.fillRect(20, 20, 200, 200)
  </script>
</body>

轮廓矩形

<body>
  <canvas width="400px" height="400px"></canvas>
  <script>
    //1、获取画布
    var canvas = document.querySelector('canvas')
    //2、获取画笔
    var context = canvas.getContext('2d')
    //3、给轮廓图形设置填充样式
    context.strokeStyle = 'pink'
    //4、给轮廓矩形设置线宽
    context.lineWidth = 8; //默认1px
    //5、绘制图形
    //strokeRect有4个参数:x轴起始位置,y轴起始位置,宽,高 
    context.strokeRect(20, 20, 200, 200)
  </script>
</body>

2、清除画布区域 

可以选择清除部分区域,也可以清除全部区域,取决于我们设置的参数。

<body>
  <canvas width="400px" height="400px"></canvas>
  <script>
    //1、获取画布
    var canvas = document.querySelector('canvas')
    //2、获取画笔
    var context = canvas.getContext('2d')
    //3、给图形设置填充样式
    context.fillStyle = 'pink' //实心填充
    //4、绘制图形
    //fillRect有4个参数:x轴起始位置,y轴起始位置,宽,高 
    context.fillRect(20, 20, 200, 200)

    //清除画布部分区域
    //clearRect有4个参数:x轴起始位置,y轴起始位置,宽,高 
    context.clearRect(100,100,50,50);

    //清除画布全部区域
    // context.clearRect(0,0,400,400);
  </script>
</body>

3、绘制一个圆

需要给开始路径 context.beginPath() 和结束路径 context.closePath(),在开始路径和结束路径之间绘制圆。

填充圆

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    //1、获取画布
    var canvas = document.querySelector('canvas')
    //2、获取画笔
    var context = canvas.getContext('2d')
    //3、需要给开始路径
    context.beginPath()
    //4、绘制圆
    //arc有6个参数:x轴开始位置,y轴开始位置,r半径,开始弧度,结束弧度,布尔值(true代表逆时针绘制,false代表顺时针绘制,默认false)
    context.arc(100, 100, 80, 0, Math.PI * 2, true)
    // 5、绘制圆的填充样式
	context.fillStyle='rgb(253, 153, 0)';
    // 6、绘制填充圆
	context.fill();
	// 7、需要给结束路径
	context.closePath();
  </script>
</body>

轮廓圆

绘制轮廓圆只需要把fill改成stroke即可。

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    //1、获取画布
    var canvas = document.querySelector('canvas')
    //2、获取画笔
    var context = canvas.getContext('2d')
    //3、需要给开始路径
    context.beginPath()
    //4、绘制圆
    //arc有6个参数:x轴开始位置,y轴开始位置,r半径,开始弧度,结束弧度,布尔值(true代表逆时针绘制,false代表顺时针绘制,默认false)
    context.arc(100, 100, 80, 0, Math.PI * 2, true)
    // 5、绘制圆轮廓的样式
	context.strokeStyle='rgb(253, 153, 0)';
    //6、绘制轮廓圆
    context.stroke()
	// 7、需要给结束路径
	context.closePath();
  </script>
</body>

会移动的圆

先画一个圆,然后再写移动函数,移动过程不断绘制圆,但是注意要把之前的圆清除掉。

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    // 1.获取画布
    var canvas = document.querySelector('canvas');
    // 2.获取上下文对象
    var context = canvas.getContext('2d');
    var obj = {
      x: 100,
      y: 100,
      r: 100,
      color: 'rgb(253, 153, 0)'
    };
    // 声明绘制圆的方法
    function draw(obj) {
      context.beginPath();
      context.arc(obj.x, obj.y, obj.r, 0, Math.PI * 2);
      // 绘制填充圆样式
      context.fillStyle=obj.color;
      // 绘制填充圆
      context.fill();
      context.closePath();
    }
    // 声明圆移动的方法
    function move(obj) {
      obj.x += 5;
      obj.y += 5;
      draw(obj);
    }
    setInterval(function () {
      // 清除原先的圆
      context.clearRect(0, 0, 600, 600);
      move(obj);
    }, 300);
    draw(obj);
  </script>
</body>

4、渐变色绘制

线性渐变

沿对角线(左上至右下)方向渐变

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    // 1.获取画布
    var canvas = document.querySelector('canvas');
    // 2.获取画笔
    var context = canvas.getContext('2d');
    // 3.绘制一个线性渐变图形 
    // 3.1创建一个线性渐变对象 
    // createLinearGradient有4个参数:渐变x轴开始位置,渐变y轴开始位置,渐变结束x轴位置,渐变结束y轴位置
    var l = context.createLinearGradient(0, 0, 400, 400);
    // 3.2给渐变图形填充颜色 
    // addColorStop有2个参数:阈值0-1填充百分比,颜色
    l.addColorStop(0, 'rgb(122, 62, 186)');
    l.addColorStop(0.25, 'rgb(110, 113, 224)');
    l.addColorStop(0.5, 'rgb(234, 191, 198)');
    l.addColorStop(0.75, 'rgb(40, 193, 204)');
    l.addColorStop(1, 'rgb(113, 230, 107)');
    // 4.将渐变对象给到图形填充样式
    context.fillStyle = l;
    // 5.绘制填充图形
    context.fillRect(0, 0, 400, 400);
  </script>
</body>

径向渐变

同心圆渐变

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    // 1.获取画布
    var canvas = document.querySelector('canvas');
    // 2.获取画笔
    var context = canvas.getContext('2d');
    // 3.绘制一个线性渐变图形 
    // 3.1创建一个线性渐变对象 
    // createRadialGradient有6个参数:前三个参数:小圆心x轴开始位置,y轴开始位置,半径;后三个参数:大圆心x轴开始位置,y轴开始位置,半径
    var g = context.createRadialGradient(200,200,50,200,200,200);
    // 3.2给渐变图形填充颜色 
    // addColorStop有2个参数:阈值0-1填充百分比,颜色
    g.addColorStop(0, 'rgb(122, 62, 186)');
    g.addColorStop(0.25, 'rgb(110, 113, 224)');
    g.addColorStop(0.5, 'rgb(234, 191, 198)');
    g.addColorStop(0.75, 'rgb(40, 193, 204)');
    g.addColorStop(1, 'rgb(113, 230, 107)');
    // 4.将渐变对象给到图形填充样式
    context.fillStyle = g;
    // 5.绘制填充图形
    context.fillRect(0, 0, 400, 400);
  </script>
</body>

5、绘制线段

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    // 获取画布
    var canvas = document.querySelector('canvas');
    // 获取画笔
    var context = canvas.getContext('2d');
    context.lineWidth = 5;
    // 需要开始路径
    context.beginPath();
    // 绘制线段 moveTo从哪里开始 lineTo到哪里结束
    context.moveTo(10, 10);
    context.lineTo(110, 110);
    context.lineTo(210, 10);
    context.lineTo(310, 110);
    // 给线段设置颜色
    context.strokeStyle = 'red';
    // 绘制线段
    context.stroke();
    // 需要结束路径
    context.closePath();
  </script>
</body>

绘制一个三角形

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    // 获取画布
    var canvas = document.querySelector('canvas');
    // 获取画笔
    var context = canvas.getContext('2d');
    context.lineWidth = 5;
    // 需要开始路径
    context.beginPath();
    // 绘制线段 moveTo从哪里开始 lineTo到哪里结束
    context.moveTo(10, 10);
    context.lineTo(110, 110);
    context.lineTo(210, 10);
    // context.lineTo(10, 10);
    // 需要结束路径
    context.closePath();
    // 给线段设置颜色
    context.strokeStyle = 'red';
    // context.fillStyle = 'red';
    // 绘制线段
    context.stroke();
    // context.fill();
  </script>
</body>

6、绘制图片

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    // 获取画布
			var canvas=document.querySelector('canvas');
			// 获取画笔
			var context=canvas.getContext('2d');
			// 创建一个img标签 构造函数方式new Image();
			var img=new Image();
			// console.log(img);
			img.src='https://img2.baidu.com/it/u=2163681967,1120787845&fm=253&fmt=auto&app=138&f=PNG?w=200&h=267';
			// 绘制图片,drawImage有5个参数:要绘制得图片/视频,开始x、y轴位置,宽高
			img.onload=function(){
				context.drawImage(img,0,0,200,200);
			}
  </script>
</body>

 

7、绘制视频 

<body>
  <canvas width="600px" height="600px"></canvas>
  <video controls src="../音视频/1.mp4" width="300px"></video>
  <script>
    // 获取画布
			var canvas=document.querySelector('canvas');
			// 获取画笔
			var context=canvas.getContext('2d');
			var video=document.querySelector('video');
			function draw(){
				context.drawImage(video,0,0,300,300);
				// 请求动画帧
				requestAnimationFrame(draw);
			}
			draw()
  </script>
</body>

8、绘制文本

<body>
  <canvas width="600px" height="600px"></canvas>
  <script>
    // 获取画布
			var canvas=document.querySelector('canvas');
			// 获取画笔
			var context=canvas.getContext('2d');
			// 绘制文本
			context.font='25px bold';
			// 参数:要绘制得文本 x y 起始位置
			// context.fillText('hello world',100,100);
			context.strokeText('hello yeziyes',100,100);
  </script>
</body>

相关文章:

  • 查题校园题库系统 授权即可使用
  • 弹性力学的简单学习
  • 青云霍秉杰:一文读懂Prometheus长期存储主流方案
  • 【Swoole系列4.6】协程连接池
  • 美的集团上半年营收1827亿:净利160亿 狠心批量裁员
  • 手机+卫星,到底有多难?
  • c++基础(九)——静态成员
  • Android中的Drawable(三)
  • Java面向对象(二)
  • 【spring】bean的生命周期
  • R语言ggplot2可视化:使用ggpubr包的ggline函数可视化分组折线图(点线图、line plot)、palette参数自定义不同分组折线图的颜色
  • Dubbo之注册与发现
  • R语言使用df函数生成F分布密度函数数据、使用plot函数可视化F分布密度函数数据(F Distribution)
  • Java--正则表达式
  • java计算机毕业设计家政服务管理源码+数据库+系统+lw文档+mybatis+运行部署
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • CSS 三角实现
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Javascript基础之Array数组API
  • JavaScript设计模式系列一:工厂模式
  • Mac转Windows的拯救指南
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • tab.js分享及浏览器兼容性问题汇总
  • vue的全局变量和全局拦截请求器
  • Vue实战(四)登录/注册页的实现
  • 爱情 北京女病人
  • 创建一个Struts2项目maven 方式
  • 简单基于spring的redis配置(单机和集群模式)
  • 京东美团研发面经
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 使用parted解决大于2T的磁盘分区
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​configparser --- 配置文件解析器​
  • ​低代码平台的核心价值与优势
  • #define
  • #Linux(权限管理)
  • #QT(智能家居界面-界面切换)
  • (Git) gitignore基础使用
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (第二周)效能测试
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转) Android中ViewStub组件使用
  • (转)jQuery 基础
  • .NET CLR基本术语
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET LINQ 通常分 Syntax Query 和Syntax Method