html5之canvas绘制图像

1 篇文章 0 订阅
canvas介绍

很多人都不知道canvas到底是做什么用的,在项目中如何使用,下来给大家介绍一下canvas能做什么。
canvas是HTML5中的新元素,你可以使用dujavascript用它来绘制图形、图zhi标、以及其它任何视觉性图像。它也可用于创dao建图片特效和动画。如果你掌握了完整的命令,你可以用canvas创建丰富的web应用程序。如果你想很好的使用canvas,你首先应该很好的掌握javascript。

canvas使用

首先我们来创建一个画板出来,画板上有什么就需要你自己去加进去了

 <canvas id='myCanvas' width="800" height="600">不支持canvas元素,更新浏览器</canvas>

上面代码我是我是创建了一个画板,指定了画板的宽度和高度,因为canvas 是HTML5新增的标签,所以canvas 是不支持低版本的浏览器的,(比如IE8以下的都不支持),我们在标签里面提示浏览器不支持。

// 使用 id 来寻找 canvas 元素
var canvas = document.getElementById('myCanvas')
 //创建 context 对象
var context =canvas.getContext('2d')
//给所绘制的图形添充颜色
context.fillStyle='#ff0000',
//规定形状、位置、尺寸,第一个参数是Y左边,第二个是X坐标,第三个是宽,第四个是高
 context.fillRect(10,30,100,120)

getContext(“2d”) 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
画一个圆形

// 使用 id 来寻找 canvas 元素
var canvas = document.getElementById('myCanvas')
 //创建 context 对象
var context =canvas.getContext('2d')
//beginPath()定义一个新的路径绘制动作的开始
context.beginPath()
//创建弧/曲线(用于创建圆形或部分圆)四个参数arc(x,y,r,start,stop)
context.arc(95,50,40,0,2*Math.PI);
//绘制线路(相当于那笔把上面的各个点连接起来)
 context.stroke()

上面代码就是在画布上画一个简单的圆形图案。

//画直线
var canvas = document.getElementById('myCanvas')
var context =canvas.getContext('2d')
context.beginPath()
 //起始点moveTo(x,y)
 context.moveTo(100,150),
//目标点lineTo(x,y)
context.lineTo(200,150),
context.stroke()

下面来画二次贝塞尔曲线,首先来简单了解一下什么是贝塞尔曲线

贝塞尔曲线
是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点(也称锚点)、控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。 在这里插入图片描述
原理:由 P0 至 P1 的连续点 Q0,描述一条线段。
由 P1 至 P2 的连续点 Q1,描述一条线段。
由 Q0 至 Q1 的连续点 B(t),描述一条二次贝塞尔曲线。

var canvas = document.getElementById('myCanvas')
var context =canvas.getContext('2d')
context.beginPath()
context.moveTo(100,150),
//创建二次贝塞尔曲线。
//四个参数,第一个贝塞尔控制点的 x 坐标;第二个贝塞尔控制点的 y 坐标;第三个结束点的 x 坐标;第四个结束点的 y 坐标。
context.quadraticCurveTo(240,50,300,150),
context.stroke()

Canvas - 渐变
渐变分为两种线性渐变和径向渐变
线性渐变

var canvas = document.getElementById('myCanvas')
var context =canvas.getContext('2d')
 // 创建渐变
var clg=context.createLinearGradient(0,0,200,0);
clg.addColorStop(0,"rgb(125, 67, 233)");
clg.addColorStop(0.5,"rgb(215, 230, 9)");
clg.addColorStop(1,"white");
// 填充线性渐变
context.fillStyle=clg;
//设置或返回用于笔触的颜色、渐变或模式
canvas.strokeStyle=clg;
context.fillRect(10,10,150,80);
context.stroke()

径向渐变

var canvas = document.getElementById('myCanvas')
var context =canvas.getContext('2d')
 // 创建径向渐变
var clg=context.createRadialGradient(200,200,150,200,200,40);
clg.addColorStop(0,"rgb(125, 67, 233)");
clg.addColorStop(0.5,"rgb(215, 230, 9)");
clg.addColorStop(1,"white");
// 填充渐变
context.fillStyle=clg;
context.fillRect(10,10,400,400);

下面是使用canvas做的一个时钟

var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
function clock() {
    ctx.save()
        ctx.translate(300,300)
        ctx.lineCap = 'round'
        ctx.strokeStyle = 'rgb(166, 167, 162)'
        ctx.lineWidth = 8
        ctx.scale(0.5,0.5)
        // 画外面的圆
        ctx.save();
        ctx.beginPath();
       ctx.strokeStyle = '#000000';
        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 = 'rgb(166, 167, 162)'
            ctx.fillStyle = 'rgb(166, 167, 162)'
            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)

静态图片是这个样子
在这里插入图片描述

简介: 新的 HTML5 规范旨在帮助开发人员更轻松的编写出各类 Web 应用,以顺应当前 SaaS,云计算以及 RIA 等技术的最新趋势。在 HTML5 得以广泛推广之前,开发人员通常使用 SVG,VML 等技术进行 Web 绘图操作,但这些基于 XML 的绘图语言声明式的绘图方式并不能满足复杂绘图操作在性能上的需求,比如 Web 游戏所需要的像素级别的绘图能力。HTML5 canvas 元素的出现填补了这种不足,开发人员可以使用 JavaScript 脚本语言在 canvas 中进行一系列基于命令的图形绘制操作,本文将通过讲解如何使用 canvas 元素进行基本绘图操作,以及完成简单的动画和用户交互任务,阐明 canvas 在帮助构建 Web 图形类应用时所能够提供的能力。更多html5相关信息请关注html5中国:http://www.html5cn.org 背景介绍 HTML5 中新引入的 canvas 元素使得 Web 开发人员在无须借助任何第三方插件(如 Flash,Silverlight)的情况下,可以直接使用 JavaScript 脚本在 Web 页面进行绘图。它首次由苹果公司的 Webkit 框架引入实现,并成功运用在 Safari 浏览器中,读者在 这里可以体验到基于 canvas 的精彩示例。目前,canvas 已成为 HTML5 规范中的事实性标准,并且已经被 Firefox 3.0+, Safari 3.0+, Chrome 3.0+, Opera10.0+ 等浏览器所支持。最近(本文撰写之时),IE 也正式宣称将在其 9.0 版本之后,开始对 canvas 元素进行支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值