Canvas


canvas 是 HTML5 当中我最喜欢的所有新特性中我最喜欢的一个标签了。因为它太强大了,各种有意思的特效都可以实现。

1. canvas 的基本使用方法

- 它是一个行内块元素
- 默认大小是 300 x 150,不能在 css 里给他设置样式,只能在标签内写它的属性。如 width = 400,height = 300
- 获取画布
var canvas = document。querySelector("canvas")
- 获取画笔(上下文)
var ctx = canvas.getContext('2d')

2. canvas 绘制基本的图形

填充矩形
ctx.fillRect(0,0,100,100)
fill:跟填充有关
Rect: 描绘一个矩形 填充图形设置样式
ctx.fillStyle = 'green' 描边矩形
ctx.strokeRect(100,100,100,100) 描边图形设置样式
ctx.strokeStyle = 'white'
ctx.lineWidth = 100 清除整个画布
ctx.clearRect(0,0,canvas.width,canvas.height) 画线段
ctx.moveTo(100,100)
ctx.lineTo(100,100) 描边
ctx.stroke()
填充
ctx.fill()- 起始点和结束点连接
ctx.closePath() ctx.save()开头
......
ctx.restore()结尾

3. 画布时钟

使用画布我们可以画一个时钟,包括刻度和时针,每一秒走的刻度可以用 Data 对象通过定时器来时时更新。

var canvas = document.querySelector("canvas");
var ctx = canvas.getContext("2d"); function move() {
ctx.save()
ctx.translate(300,300)
// 初始化一些公共的样式
ctx.lineCap = 'round'
ctx.strokeStyle = 'black'
ctx.lineWidth = 8
ctx.scale(0.5,0.5) // 画外面的圆
ctx.save();
ctx.beginPath();
ctx.strokeStyle = 'gold';
ctx.arc(0,0,150,0,2*Math.PI);
ctx.stroke();
ctx.restore(); // 画里面的刻度
ctx.save()
ctx.beginPath();
for (var i=0; i < 12; i++) {
ctx.moveTo(0,-125);
ctx.lineTo(0,-140);
ctx.stroke()
ctx.rotate(30*Math.PI/180)
}
ctx.restore() // 分针刻度
ctx.save()
ctx.lineWidth = 3
for (var i = 0; i < 60; i++) {
if (i % 5 != 0){
ctx.beginPath()
ctx.moveTo(0,-135);
ctx.lineTo(0,-140);
ctx.stroke()
}
ctx.rotate(6*Math.PI/180)
}
ctx.restore()
// 当前时间
var date = new Date()
var s = date.getSeconds()
var min = date.getMinutes() + s/60
var h = date.getHours() + min/60 // 时针
ctx.save()
ctx.rotate(30*h*Math.PI/180)
ctx.lineWidth = 14
ctx.beginPath()
ctx.moveTo(0,-80)
ctx.lineTo(0,20)
ctx.stroke()
ctx.restore() // 分针
ctx.save()
ctx.lineWidth = 10
ctx.rotate(6*min*Math.PI/180)
ctx.beginPath()
ctx.rotate(-30*Math.PI/180)
ctx.moveTo(0,-120)
ctx.lineTo(0,30)
ctx.stroke()
ctx.restore() //秒针
ctx.save()
ctx.lineWidth = 6
ctx.strokeStyle = 'pink'
ctx.fillStyle = 'pink'
ctx.rotate(6*s*Math.PI/180) ctx.beginPath()
ctx.arc(0,0,10,0,2*Math.PI)
ctx.fill() ctx.beginPath()
ctx.moveTo(0,-125)
ctx.lineTo(0,30)
ctx.stroke() ctx.beginPath()
ctx.arc(0,-135,10,0,2*Math.PI)
ctx.stroke()
ctx.restore()
ctx.restore()
} setInterval(function () {
ctx.clearRect(0,0,canvas.width,canvas.height)
move()
},1000)

静止的图像如下图。

刮刮卡效果

使用 canvas 的图形合成的属性可以实现图片合成的效果。具体应用于刮刮卡。
globalCompositeOperation属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上
源图像 = 您打算放置到画布上的绘图
目标图像 = 您已经放置在画布上的绘图

var  canvas = document.querySelector("canvas")
var ctx = getCtx()
log(ctx)
ctx.fillStyle = 'yellow'
ctx.fillRect(0,0,400,400) ctx.globalCompositeOperation = 'destination-out'; // 鼠标按下
canvas.onmousedown = function (event) {
ctx.beginPath()
ctx.arc(event.clientX - canvas.offsetLeft,event.clientY - canvas.offsetTop,
20,0,2*Math.PI)
ctx.fill()
// 鼠标移动
document.onmousemove = function (event) {
ctx.beginPath()
ctx.arc(event.clientX - canvas.offsetLeft,event.clientY - canvas.offsetTop,
20,0,2*Math.PI)
ctx.fill()
} // 鼠标抬起
document.onmouseup = function () {
document.onmousemove = document.onmouseup = null
}
return false
}

Canvas 使用及应用的更多相关文章

  1. html5 canvas常用api总结(三)--图像变换API

    canvas的图像变换api,可以帮助我们更加方便的绘画出一些酷炫的效果,也可以用来制作动画.接下来将总结一下canvas的变换方法,文末有一个例子来更加深刻的了解和利用这几个api. 1.画布旋转a ...

  2. 【探索】利用 canvas 实现数据压缩

    前言 HTTP 支持 GZip 压缩,可节省不少传输资源.但遗憾的是,只有下载才有,上传并不支持.如果上传也能压缩,那就完美了.特别适合大量文本提交的场合,比如博客园,就是很好的例子. 虽然标准不支持 ...

  3. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  4. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  5. Canvas坐标系转换

    默认坐标系与当前坐标系 canvas中的坐标是从左上角开始的,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角坐标为x=0,y=0的点称作原点.在默认坐标系中,每一个点的坐标都是直接 ...

  6. Canvas绘图之平移translate、旋转rotate、缩放scale

    画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...

  7. 用html5的canvas和JavaScript创建一个绘图程序

    本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...

  8. html5标签canvas函数drawImage使用方法

    html5中标签canvas,函数drawImage(): 使用drawImage()方法绘制图像.绘图环境提供了该方法的三个不同版本.参数传递三种形式: drawImage(image,x,y):在 ...

  9. 使用 JavaScript 和 canvas 做精确的像素碰撞检测

    原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...

  10. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

随机推荐

  1. poj-3259 Wormholes(无向、负权、最短路之负环判断)

    http://poj.org/problem?id=3259 Description While exploring his many farms, Farmer John has discovere ...

  2. java代码实现数据源切换(连接池简单粗暴)

    --最佳实践配置(.yml) gs.oracle: #driverClassName: oracle.jdbc.driver.OracleDriver driverClassName: oracle. ...

  3. python之处理json字符串

    一.如何从文件中读取json字符串 通过json模块可以处理json数据. 1.loads()方法 loads(json_object)将json字符串转换成dict类型. import json # ...

  4. 多对多表创建、forms组件、cookie与session

    多对多表的三种创建方式 1.全自动(较为推荐) 优势:不需要你手动创建第三张表 不足:由于第三张表不是你手动创建的,所以表字段是固定的无法扩展 class Book(models.Model): ti ...

  5. 78)PHP,编写session存储机制(将数据写进数据库)的代码整理(未实验)

    <?php function userSessionBegin() { echo '<br>Begin<br>'; //初始化数据库服务器连接,这个函数是最先执行,所以, ...

  6. C++ this指针详解(精辟)

    this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员. 所谓当前对象,是指正在使用的对象.例如对于stu.show();,stu 就是当前 ...

  7. sqlserver 命令执行sql脚本

    osql -S 主机名 -U 用户名 -P 密码 -i E:\20190723.sql

  8. IoC容器设计

    本文主要摘录于  Spring技术内幕-深入即系Spring架构和设计原理(许文柯著). IoC是根据两个核心BeanFactory和ApplicationContext来设计的,这里先放一张Spri ...

  9. htaccess 伪静态的规则

    利用htaccess文件可以很好的进行站点伪静态,并且形成的目标地址与真正的静态页面几乎一模一样,如abc.html等,伪静态可以非常好的结合SEO来提高站点的排名,并且也能给人一种稳定的印象. 由于 ...

  10. python3下应用pymysql(第二卷)

    上一卷讲述的是单条插入数据,现在要多条插入数据: 随意定义了一批数据 去数据库查询一下: 下面试一下查询语句: 获取游标里的数据,结果如下: 下面更改下返回数据类型,如果想用字典类型: 结果如下: 在 ...