在前端页面开发过程中偶尔会有需要对数据进行相应的数学模型展示,或者地理位置的动态展示,可能就会想到用canvas,网上有很多已经集成好的,比如说类似echarts,确实功能非常强大,而且用到了canvas,所以对canvas的使用研究了以下,做一下总结,方便复习。
1.利用canvas画一条线:
首先,在页面定义一个canvas标签

<canvas id="line" width="200" height="200"></canvas>

然后js中开始绘制

var line = document.getElementById('line');
if(line.getContext){
var lineCtx = line.getContext('2d');
lineCtx.moveTo(50,50);
lineCtx.lineTo(150,150);
lineCtx.stroke();
}

首先找到需要绘制图像的画布元素,然后if判断浏览器是否支持canvas,支持以后,就开始绘制,画一条线的步骤非常简单,定义起始位置坐标后,stroke()函数,绘制;

2.利用canvas画一个矩形:

<canvas id="rect" width="200" height="200"></canvas>
var rect = document.getElementById('rect');
if(rect.getContext){
var rectCtx = rect.getContext('2d');
rectCtx.fillStyle = '#7068D6';
rectCtx.fillRect(50,50,100,100);
}

fillStyle用来填充矩形的颜色,fillRect(x,y,width,height)填充矩形;

3.利用canvas来绘制圆形:

<canvas id="circle" width="200" height="200"></canvas>
var circle = document.getElementById('circle');
if(circle.getContext){
var circleCtx = circle.getContext('2d');
circleCtx.beginPath();
circleCtx.arc(100,100,50,0,2*Math.PI);
circleCtx.stroke();
}

绘制圆形跟矩形有点区别,需要先beginPath(),然后利用arc(圆心x轴坐标,圆心y轴坐标,半径长度,起始度数,结束度数),圆形绘制时是顺时针开始,所以如果想绘制弧形,要知道怎么弄。

4.绘制文字:

<canvas id="txt" width="200" height="200"></canvas>
var txt = document.getElementById('txt');
if(txt.getContext){
var txtCtx = txt.getContext('2d');
txtCtx.font = '30px Arial';
txtCtx.fillText('hi,luhan',50,50);
txtCtx.strokeText('hi.luhan',50,100);
}

绘制文字有几个参数可以设置,font、fillText(‘要绘制的文字’,x,y),注意fillText是填充文字,所以绘制出来的是实心文字,strokeText(‘要绘制的文字’,x,y)绘制的是空心文字;

5.结合以上几种绘图方式,绘制一个笑脸:

<canvas id="canvas" width="200" height="200"></canvas>
var canvas = document.getElementById('canvas');
if(canvas.getContext){
var mapCtx = canvas.getContext('2d');
mapCtx.beginPath();
mapCtx.arc(75, 75, 50, 0, Math.PI * 2, true);
mapCtx.moveTo(110, 75);
mapCtx.arc(75, 75, 35, 0, Math.PI, false);
mapCtx.moveTo(65, 65);
mapCtx.arc(60, 65, 5, 0, Math.PI * 2, true);
mapCtx.moveTo(95, 65);
mapCtx.arc(90, 65, 5, 0, Math.PI * 2, true);
mapCtx.stroke();
}

6.利用canvas绘制静态图片:

<canvas id="img" width="200" height="200"></canvas>
var img = document.getElementById('img');
if(img.getContext){
var imgCtx = img.getContext('2d');
var imgEl = new Image();
imgEl.src = 'img/headPic.jpg';
imgEl.onload = function(){
imgCtx.drawImage(imgEl,10,10,100,100);
}
}

等待图片资源加载完毕,开始绘制drawImage(图片元素,x,y,width,height);

以上就是对canvas绘制各种图形的总结,如果想绘制复杂的图形,可能就需要用集成好的组件更方便,数据转图形类的推荐echarts,官方实例超多,echarts实例展示
如果想要酷炫动画,推荐17素材网站
最后,在前端开发过程中,如果只是需要某一部分的实现需要canvas,就可以直接用网上大家集成好的,基本原理懂了,如果用的过程中有什么问题也是能猜个大概,不必浪费太多时间。

html5新特性canvas绘制图像的更多相关文章

  1. HTML新特性--canvas绘图-文本

    一.html5新特性--canvas绘图-文本(重点) #常用方法与属性 -ctx.strokeText(str,x,y);   绘制描边文字(空心) str:绘制文本 x,y:字符串左上角位置(以文 ...

  2. html5新特性与用法大全了解一下

    有好多小伙伴私聊我问我html5新特性 和用法,下面我给大家具体介绍一下html5都新加了哪些新特性,下面我给大家总结一下. 1)新的语义标签 footer header 等等2)增强型表单 表单2. ...

  3. HTML5新特性--svg-echarts(重点)-拖动API-WebWorker

    一.html5新特性--svg--(折线/渐变特效对象/滤镜) #折线:多个坐标点组件一条折线 <polyline points="50,50 70,55 60,66 " s ...

  4. html5新特性

    这一篇博文不会告诉你怎么去使用html5的新特性,只会给你总结一下新特性------对于好学的人可以把这篇文章当做一个目录 对于初接触的人来说是一个导向 对于已经接触过的人来说是一个检测你掌握程度的检 ...

  5. HTML5新特性-- -定时器

    一.定时器:一次性定时器/周期性定时器 #requestAnimationFrame 智能定时器 #此定时器主要使用范围:动画和游戏中 特点: setTimeout(fn,500); setInter ...

  6. HTML5学习总结——canvas绘制象棋(canvas绘图)

    一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...

  7. HTML5新特性之CSS+HTML5实例

    1.新的DOCTYPE和字符集 HTML5的一项准则就是化繁为简,Web页面的DOCTYPE被极大的简化. <!DOCTYPE html> 同时字符集声明也被简化了: <meta c ...

  8. web全栈架构师[笔记] — 03 html5新特性

    HTML5新特性 一.geolocation PC端 精度比较低 通过IP库定位 移动端 通过GPS window.navigator.geolocation 单次 getCurrentPositio ...

  9. 第二季第八天 HTML5新特性

    在函数内部window.a =  a  在全局中就可以拿到这个变量 变量命名.作为函数的参数的时候要详细.调用的时候可以简单点 做全局变量的两个方案 1.绑在标签上data 2.闭包 视频一般都是二进 ...

随机推荐

  1. (四)目标检测算法之Fast R-CNN

    系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...

  2. LeetCode-080-删除有序数组中的重复项 II

    删除有序数组中的重复项 II 题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改 ...

  3. 扩展我们的分析处理服务(Smartly.io):使用 Citus 对 PostgreSQL 数据库进行分片

    原文:Scaling Our Analytical Processing Service: Sharding a PostgreSQL Database with Citus 在线广告商正在根据绩效数 ...

  4. 统信DTK开发套件应用技术分享

    近年来,信创产业发展迅猛,国产软硬件适配的需求日益增加,但国内CPU架构种类繁多,导致大量的适配投入.同时,由于底层代码质量不同.代码实现风格不统一等问题,造成自研操作系统的应用开发门槛高,应用生态严 ...

  5. 使用.Net6中的System.Text.Json遇到几个常见问题及解决方案

    前言 以前.NetCore是不内置JSON库的,所以大家都用Newtonsoft的JSON库,而且也确实挺好用的,不过既然官方出了标准库,那更方便更值得我们多用用,至少不用每次都nuget安装Newt ...

  6. 09自动售货机综设实验(含按键消抖,led和状态机)

    一设计功能 1.上次状态机的练习 2这次自动售货机综设 (一)对比两次的售货机 上次售货机的关键是画出状态转移图.明确输入分几种,输出是啥,有哪些状态.如下图所示 (二)系统或综合设计的经验: 既然这 ...

  7. C++设计模式 - 访问器模式(Visitor)

    行为变化模式 在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化."行为变化" 模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合. 典型模 ...

  8. JS的Event各种属性级target/currentTarget/relatedTarget各种目录的解释

    1.Event属性解释:https://developer.mozilla.org/zh-CN/docs/Web/API/Event 2.Event.target/currentTarget/rela ...

  9. Delete、truncate、drop都是删除语句,它们有什么分别?

    delete 属于DML语句,删除数据,保留表结构,需要commit,可以回滚,如果数据量大,很慢. truncate 属于DDL语句,删除所有数据,保留表结构,自动commit,不可以回滚,一次全部 ...

  10. @RequestMapping 注解?

    该注解是用来映射一个URL到一个类或一个特定的方处理法上.