canvas使用注意点总结


Posted in HTML / CSS onJuly 19, 2013

1、canvas中文教程https://developer.mozilla.org/zh-CN/docs/Canvas_tutorial

2、canvas默认宽高是300、150,为避免异常,最好使用显示属性添加而不通过css来添加宽高

3、在canvas标签内部添加不支持canvas标签的浏览器的说明

4、通过下面的js代码也能判断浏览器是否支持canvas

复制代码
代码如下:

var canvas = document.getElementById('tutorial');
if (canvas.getContext){
var ctx = canvas.getContext('2d');
// drawing code here
} else {
// canvas-unsupported code here
}

5、canvas只支持一种基本形状的绘制,即矩形,但是其它图形都可以通过canvas路径来绘制

6、绘制矩形有四个函数:rect、fillRect、strokeRect和clearRect

7、beginPath的作用用来开始一个新的路径层,如果不加就表示在原来路径层上绘制,下面两段代码效果是完全不一样的,第一段代码显示两条红线,第二段代码显示一条黑线和一条红线

复制代码
代码如下:

var ctx = document.getElementById('cvs').getContext('2d');
ctx.beginPath();
ctx.moveTo(100.5,20.5);
ctx.lineTo(200.5,20.5);
ctx.stroke();
ctx.moveTo(100.5,40.5);
ctx.lineTo(200.5,40.5)
ctx.strokeStyle = '#f00';
ctx.stroke();
复制代码
代码如下:

var ctx = document.getElementById('cvs').getContext('2d');
ctx.beginPath();
ctx.moveTo(100.5,20.5);
ctx.lineTo(200.5,20.5);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(100.5,40.5);
ctx.lineTo(200.5,40.5)
ctx.strokeStyle = '#f00';
ctx.stroke();

8、如果不需要路径闭合,closePath可以不用,如果使用了fill则路径则会自动闭合,不需要再使用closePath了

9、只要有足够的耐性是完全可以利用贝塞尔曲线绘制任何图形的

10、二次方曲线在火狐下存在bug,因此可以利用三次方曲线代替二次方曲线使用

11、图像(如 PNG,GIF,JPEG等)都可以引入到 canvas 中,而且其它的 canvas 元素也可以作为图像的来源

12、下面是基本的canvas图片绘制代码,其中 image 是 image 或者 canvas 对象,x 和 y 是其在目标 canvas 里的起始坐标

drawImage(image, x, y)
下面一段代码表示缩放图片,width和height表示缩放的尺寸
drawImage(image, x, y, width, height)
下面一段代码表示剪切图片,第一个参数和其它的是相同的,都是一个图像或者另一个 canvas 的引用。其它8个参数中分别表示图片中裁减的起始x坐标,图片中裁减的起始y坐标,裁减区域宽度,裁减区域高度,所画位置x坐标,所画位置y坐标,所画图形宽度,所画图形高度,裁剪区域的尺寸是可以和所画图形的尺寸不一样的,此时会缩放到所画图片的尺寸

drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)
13、strokeStyle 是用于设置图形轮廓的颜色,而 fillStyle 用于设置填充颜色。color 可以是表示 CSS 颜色值的字符串,渐变对象或者图案对象。默认情况下,线条和填充颜色都是黑色(CSS 颜色值 #000000)。

14、图像透明度可以用globalAlpha = transparency value或者rgba颜色值来表示

15、lineWidth 属性设置当前绘线的粗细,为解决1px线宽bug问题,采用+0.5的方式来解决

16、lineCap 属性最左边的线用了默认的 butt 。可以注意到它是与辅助线齐平的。中间的是 round 的效果,端点处加上了半径为一半线宽的半圆。右边的是 square 的效果,端点处加上了等宽且高度为一半线宽的方块

17、lineJoin 属性这里我同样用三条折线来做例子,分别设置不同的 lineJoin 值。最上面一条是 round 的效果,边角处被磨圆了,圆的半径等于线宽。中间和最下面一条分别是 bevel 和 miter 的效果。当值是 miter 的时候,线段会在连接处外侧延伸直至交于一点,延伸效果受到下面将要介绍的 miterLimit 属性的制约

18、save 和 restore 方法是用来保存和恢复 canvas 状态的,都没有参数。Canvas 的状态就是当前画面应用的所有样式和变形的一个快照。Canvas 状态是以堆(stack)的方式保存的,每一次调用 save 方法,当前的状态就会被推入堆中保存起来。每一次调用 restore 方法,上一个保存的状态就从堆中弹出,所有设定都恢复。

19、transform(1, 0, 0, 1, 0, 0)参数分别表示水平方向缩放、水平方向旋转(顺时针)、垂直方向旋转(逆时针)、垂直方向缩放、水平方向偏移量、垂直方向偏移量

setTransform(1, 0, 0, 1, 0, 0)表示重置前一个变换矩阵然后构建新的矩阵,参数作用同上

rotate(angle),(一个半径等于1弧度,2πr/r=弧度即360=2π,即1=π/180)

20、动画其实就是不断清空画板(clearRect()),然后重绘

HTML / CSS 相关文章推荐
使用CSS3实现圆角,阴影,透明
Dec 23 HTML / CSS
CSS3的颜色渐变效果的示例代码
Sep 29 HTML / CSS
使用纯 CSS 创作一个脉动 loader效果的源码
Sep 28 HTML / CSS
详解如何在css3打包后自动追加前缀插件:autoprefixer
Dec 18 HTML / CSS
HTML5 本地存储和内容按需加载的思路和方法
Apr 07 HTML / CSS
Javascript 高级手势使用介绍
Apr 21 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
Jul 04 HTML / CSS
HTML5中5个简单实用的API
Apr 28 HTML / CSS
html5中audio支持音频格式的解决方法
Aug 24 HTML / CSS
高清屏下canvas重置尺寸引发的问题的解决
Oct 14 HTML / CSS
HTML5 FileReader对象的具体使用方法
May 22 HTML / CSS
css3 实现文字闪烁效果的三种方式示例代码
Apr 25 HTML / CSS
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
Jul 19 #HTML / CSS
HTML5 的新的表单元素(datalist/keygen/output)使用介绍
Jul 19 #HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
Jul 19 #HTML / CSS
HTML5标签与HTML4标签的区别示例介绍
Jul 18 #HTML / CSS
html5 音乐播放器 audio 标签使用概述
Jul 15 #HTML / CSS
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
Jul 15 #HTML / CSS
css 如何让背景图片拉伸填充避免重复显示
Jul 11 #HTML / CSS
You might like
Breeze 文章管理系统 v1.0.0正式发布
2006/12/14 PHP
使用PHP接收POST数据,解析json数据
2013/06/28 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
python颜色随机生成器的实例代码
2020/01/10 Python
python3.7调试的实例方法
2020/07/21 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
马来西亚在线药房:RoyalePharma
2019/12/01 全球购物
传播学毕业生求职信
2013/10/11 职场文书
白酒业务员岗位职责
2013/12/27 职场文书
优秀的茶餐厅创业计划书
2014/01/03 职场文书
人事专员岗位说明书
2014/07/29 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
Python面向对象之成员相关知识总结
2021/06/24 Python