HTML--Canvas基础入门
一 HTML5画布基本介绍
1.HTML5专门为画布功能提供的标签:<canvas>,所以画布相关的功能都是基于这个标签来完成的;
<canvas id="canvas" width="550" height="300"></canvas>
// 直接在canvas中设置width和height属性和将width和height添加到CSS文件中,有一定的区别:
// 1.使用属性来定义canvas,不仅定义canvas对象的宽高,同时也定义了可绘制图形区的宽高;
// 2.而使用CSS的方法只能定义canvas本身的大小,不能定义图形绘制区;
2.为了能够调用HTML5的画布API,我们需要访问画布的相关上下文(Context);
var canvas = document.getElementById('canvas'),
context = canvas.getContext('2d');
// 使用context可以调用更多的方法来绘制;
二 使用HTML5画布绘制直线
1.beginPath():开始绘制准备;
2.moveTo():绘制的起始坐标(x,y);
3.lineTo():绘制的结束坐标(x,y);
4.stroke():立刻开始绘制直线;
var canvas = document.getElementById('Canvas'),
context = canvas.getContext('2d');
context.beginPath();
context.moveTo(150, 100);
context.lineTo(300, 200);
context.stroke();
三 设置直线的粗细
context.lineWidth = 20; // 设置直线的宽度为20px;
// 须在调用stroke()方法前设置这个属性;否则此属性无效;
四 设置绘制直线的颜色
context.strokeStyle = '#dd4814'; // 设置直线颜色;
// 须在调用stroke()方法前设置这个属性;否则此属性无效;
五 设置直线两端的样式
1.context.lineCap = 'butt'; // 绘制按钮类型;
2.context.lineCap = 'round'; // 绘制圆角类型;
3.context.lineCap = 'square'; // 绘制正方形类型;
六 绘制弧形
// HTML5画布使用arc()方法来绘制相关的弧形;
arc(
x, // 定义圆心x坐标;
y, // 定义圆心y坐标;
radius, // 半径;
startAngle, // 起始角度;
endAngle, // 结束角度;
counterClockWise, // 是否是逆时针方向;
)
var x = 200, y = 150, radius = 60, startAngle = 0.5*Math.PI, endAngle = 1.5*Math.PI, counterClockWise = false;
context.beginPath();
context.arc(x, y, radius, startAngle, endAngle, counterClockWise);
context.strokeStyle = 'black';
context.lineWidth = 15;
context.stroke();
七 生成二次曲线
// 二次曲线通过控制两根虚拟的直线来生成对应的图形;
context.beginPath();
context.moveTo(100, 200);
context.quadraticCurveTo(150, 50, 200, 200);
context.lineWidth = 20;
context.strokeStyle = '#dd4814';
context.stroke();
八 生成贝塞尔曲线
// 相对于二次曲线来说,贝塞尔曲线增加了一个控制点来生成更复杂的曲线样式;
context.beginPath();
context.moveTo(188, 130);
context.bezierCurveTo(140, 10, 388, 10, 388, 170);
context.lineWidth = 20;
context.strokeStyle = '#dd4814';
context.stroke();
九 HTML5路径
// 使用HTML5的路径(path),可以连接多个子路经;
// 上一个路径的结束点即成为下一个路径的起始点;
1.lineTo();
2.arcTo();
3.quadraticCruveTo(); // 向下弯曲;
4.bezierCurveTo(); // 先向上弯曲,再向下弯曲;
context.beginPath();
context.moveTo(100, 20);
context.lineTo(200, 160);
context.quadraticCurveTo(230, 200, 250, 120);
context.bezierCurveTo(290, -40, 300, 200, 400, 150);
context.lineTo(500, 90);
context.lineWidth = 15;
context.strokeStyle = '#dd4814';
context.stroke();
十 设置直线的连接样式
// 在HTML5画布中直线的连接样式(linejoin)可以有不同类型;
1.miter:直角连接;
2.round:圆角连接;
3.bevel:去角连接;
context.beginPath();
context.moveTo(99, 150);
context.lineTo(149, 50);
context.lineTo(199, 150);
context.lineJoin = 'miter';
context.stroke();
十一 arcTo生成矩形圆角效果
// HTML5画布中我们可以使用arcTo方法来生成矩形圆角效果;
var rectWidth = 200;
var rectHeight = 100;
var rectX = 189, rectY = 100;
var cornerRadius = 50;
context.beginPath();
context.moveTo(rectX, rectY);
context.lineTo(rectX + rectWidth - cornerRadius, rectY);
context.arcTo(rectX + rectWidth, rectY, rectX + rectWidth, rectY + cornerRadius, cornerRadius);
context.lineTo(rectX + rectWidth, rectY + cornerRadius + rectHeight);
context.lineWidth = 15;
context.stroke();
十二 画布生成闭合的图形
// 在HTML5画布中,我们使用beginPath方法开始路径设置,同时使用closePath方法来闭合路径;
context.beginPath();
context.moveTo(170, 80);
context.bezierCurveTo(130, 100, 130, 150, 230, 150);
context.bezierCurveTo(250, 180, 320, 180, 340, 150);
context.bezierCurveTo(420, 150, 420, 120, 390, 100);
context.bezierCurveTo(430, 40, 370, 30, 340, 50);
context.bezierCurveTo(320, 5, 250, 20, 250, 50);
context.bezierCurveTo(200, 5, 150, 20, 170, 80);
context.closePath();
context.lineWidth = 15;
context.lineJoin = 'round';
context.strokeStyle = '#dd4814';
context.stroke();
十三 使用HTML5画布生成正方形或者矩形
// rect(x, y, w, h);
// x,y代表矩形的左上角坐标;w是指矩形的宽度;h是指矩形的长度;
context.beginPath();
context.rect(100, 50, 200, 200); // 绘制宽高;
context.fillStyle = '#dd4814'; // 设置填充颜色;
context.fill(); // 绘制结束;
十四 绘制圆形
// 在HTML5画布中,如果需要生成一个原型,可以通过调用arc()方法来实现;
// 只需要设置起始角度为0,终止角度是2*Math.PI;
var centerX = canvas.width/2,
centerY = canvas.height/2,
radius = 80;
context.beginPath();
context.arc(centerX, centerY, radius, 0, 2*Math.PI, false);
context.fillStyle = '#dd4814'; // 内填充颜色;
context.fill(); // 设置内填充; context.lineWidth = 12; // 描边宽度;
context.strokeStyle = 'orange'; // 描边颜色;
context.stroke(); // 设置描边;
// 若同时使用了fill()和stroke(),务必保证fill()在stroke()之前调用,否则stroke()绘制的线会被fill()遮住一半;
十五 HTML5画布生成线性渐变效果
1.createLinearGradient(x0, y0, x1, y1);
// x0,y0代表了渐变开始点坐标;x1,y1代表了结束点坐标;
2.addColorStop(stop, color);
// 设置渐变方向后,可以使用addColorStop来设置渐变的颜色;
// stop介于0~1之间的值,表示渐变中开始与结束之间的位置;color代表颜色值;
context.rect(0, 0, canvas.width, canvas.height);
var gridi = context.createLinearGradient(0, 0, canvas.width, canvas.height);
gridi.addColorStop(0, 'orange');
gridi.addColorStop(1, '#dd4814');
context.fillStyle = gridi;
context.fill();
十六 HTML5画布绘制径向渐变;
var gridi = context.createRadialGradient(275, 150, 50, 275, 150, 200);
// 起始点X坐标, 起始点Y坐标, 起始点半径, 渐变结束点X坐标, 渐变结束点Y坐标, 结束点半径;
gridi.addColorStop(0, '#dd4814');
gridi.addColorStop(1, '#ffff66');
context.fillStyle = gridi;
context.fillRect(0, 0, 550, 300);
十七 HTML5画布中添加背景图案
createPattern(image, repetition);
// image:对应的图片对象;
// repetition:图片的重复属性;默认值是repeat;
var image = new Image();
image.onload = function () {
// 这里确保图片加载后再执行HTML5画布相关的方法;
var pattern = context.createPattern(image, 'repeat');
context.rect(0, 0, 550, 300);
context.fillStyle = pattern;
context.fill();
}
// 设置背景图案的地址:
image.src = 'http://www.gbtags.com/gb/networks/uploadimg/d72f284c-c729-4de7-ba3e-b93587cb1446.jpg';
十八 HTML5画布绘图
// 使用drawImage()方法来绘制图形;
var image = new Image();
image.onload = function(){
context.drawImage(image, 100, 50, 200, 125);
// 绘制图片image,第二和第三个参数表示图片距离canvas左上角的left和top距离;
// 第四和第五个参数表示绘制图片的宽度和高度;
}
image.src = 'http://www.gbtags.com/gb/networks/uploadimg/d72f284c-c729-4de7-ba3e-b93587cb1446.jpg';
十九 画布实现图片裁剪
drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
// sx:相对于图片自身裁剪的左边距离;
// sy:相对于图片自身裁剪的顶端距离;
// sw:裁剪的图片宽度;
// sh:裁剪的图片高度;
// dx:图片裁剪后相对于画布左端距离;
// dy:图片裁剪后相对于画布顶端距离;
// dw:图片裁剪后设置宽度;
// dy:图片裁剪后设置高度;
var image = new Image();
image.onload = function(){
context.drawImage(image, 100, 50, 100, 84, 50, 50, 100, 84);
};
image.src = 'http://www.gbtags.com/gb/networks/uploadimg/d72f284c-c729-4de7-ba3e-b93587cb1446.jpg';
二十 HTML画布添加文字
// 使用fillStyle属性来设置字体颜色;
context.fillStyle = '#dd4814'; // 注意:在fillText()之前设置fillStyle的值;
// 使用相关属性,可以定义文字属性,
context.font = 'bold 30pt "microsoft yahei"';
// 使用fillText()方法添加相关文字;
context.fillText(text, x, y);
context.font = 'bold 30pt "microsoft yahei"';
context.fillStyle = '#dd4814';
context.fillText('Hello World!', 150, 160);
二十一 HTML画布添加描边文字
// 使用strokeText()方法可以添加描边文字类型;
// 并且可以使用strokeStyle()来设置描边颜色;
context.font = 'bold 30pt "microsoft yahei"';
context.fillStyle = '#ff6';
context.fillText('Hello World!', 150, 160);
context.strokeStyle = '#dd4814';
context.lineWidth = 2;
context.strokeText('Hello World!', 150, 160);
// 如果需要同时使用fillText()和strokeText()方法,务必先调用fillText()方法;
二十二 HTML画布文字对齐
// 在HTML5画布中,我们使用textAlign属性来定义文字的对齐;
1.center-居中;
2.left-居左;
3.right-居右;
4.start-文字方向从左到右;
5.end-文字方向从右到左;
context.font = 'bold 30pt "microsoft yahei"';
context.textAlign = 'right';
context.fillText('Hello World!', 275, 150);
// 基于坐标点(275, 150)的右对齐;
二十四 HTML5画布获取文字度量
// 在HTML5画布中,我们可以使用measureText方法来获取文字的相关度量信息对象;
// 其中包含一个属性,即文字宽度;基于文字的大小和字体,它可以提供一个准确的文字宽度;
var x = canvas.width/2,
y = canvas.height/2 - 10;
var text = 'Hello HTML5'; context.font = 'bold 30pt "microsoft yahei"';
context.textAlign = "center";
context.fillStyle = 'red';
context.fillText(text, x, y); // 以下代码获取上面定义的text的相关metrics信息;
var metrics = context.measureText(text);
var width = metrics.width;
context.font = '15pt Arial';
context.textAlign = 'center';
context.fillStyle = '#888';
context.fillText('- ' + width + 'px -', x, y+45);
推荐网站:极客标签
HTML--Canvas基础入门的更多相关文章
- canvas基础入门(二)绘制线条、三角形、七巧板
复杂的内容都是有简单的线条结合而成的,想要绘制出复杂好看的内容先从画直线开始 canvas绘制直线先认识几个函数 beginPath():开始一条路径,或重置当前的路径 moveTo(x,y):用于规 ...
- canvas基础入门(一)canvas的width、height于css样式中的宽高区别
canvas的width.height于css样式中的宽高对画布的内容显示是有所区别的 1.在canvas标签下调用他的width和height,而且是没有单位的宽高,这种指定canvas大小的方法也 ...
- HTML5 Canvas——基础入门
认识canvas html5的新标签 <canvas>标签只是图像容器,必须使用js来绘制图形 可以通过多种方法使用canvas绘制路径,盒,圆,字符以及添加图像 canvas画布 < ...
- canvas的基础入门
canvas是定义在浏览器上的画布.它不仅仅是一个标签元素更是一个编程工具是一套编程的接口.利用它可以开发出很多东西,比如动画,游戏,动态的图表等富有变现力和感染力的应用.还可以开发出绚丽的3D动态效 ...
- osgEarth基础入门
osgEarth基础入门 2015年3月21日 16:19 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件 ...
- 从零基础入门JavaScript(1)
从零基础入门JavaScript(1) 1.1 Javascript的简史 1995年的时候 由网景公司开发的,当时的名字叫livescript 为了推广自己的livescript,搭了j ...
- osgEarth基础入门(转载)
osgEarth基础入门 osgEarth是基于三维引擎osg开发的三维数字地球引擎库,在osg基础上实现了瓦片调度插件,可选的四叉树调度插件,更多的地理数据加载插件(包括GDAL,ogr,WMS,T ...
- canvas API ,通俗的canvas基础知识(一)
在没学canvas的时候,觉得canvas是这么的神秘,这么的绚丽,这么的高深,用canvas做出来的效果是如此的炫酷,能做的事情如此的宽广,简直让我心生敬畏之心,时常感叹:我要是得此技能,必定要上天 ...
- html5 基础入门
html5 基础入门 前言介绍 HTML5草案的前身名为 Web Applications 1.0,于2004年被WHATWG提出,于2007年被W3C接纳,并成立了新的 HTML工作团队. 如果从狭 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
随机推荐
- WPF 依赖属性&附加属性
依赖属性 暂无 附加属性 1.在没有控件源码的前提下增加控件的属性 2.多个控件需要用到同一种属性 使用附加属性可以减少代码量,不必为每一个控件都增加依赖属性 3.属性不确定是否需要使用 在某些上下文 ...
- python 使用unittest进行单元测试
import unittest import HTMLTestRunner """ Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面 ...
- c# 多线程实现ping 多线程控制控件
这个备份器放在项目目录下面,每次使用就双击一下,因为便捷性,就不采用xml等等储存信息,全部在面板内做,这样可以保证一个exe就运行了. 我发现运行起来还蛮快的,唯一没有实现的是ping通的电脑如果出 ...
- Java中的代理机制
Java的三种代理模式 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 简言之,代理模 ...
- Android 发展思路
1. 做一个有 ‘特色’ 的程序员 Android 开发,本身并不是一个可以走得多远的方向,真正有价值的地方在于与具体的业务方向结合,比如:Android 与音视频技术,Android 与智能硬件交互 ...
- JScrollPane的使用
概述 jScrollPane.js是一个轻量级的滑块插件, 非常方便使用. 在前端工业界(写页面)使用非常广泛, 下面我记录下用法, 供以后开发时参考, 相信对其他人也有用. PS: 想起之前我用im ...
- ElasticSearch权威指南学习(分布式搜索)
查询阶段 在初始化查询阶段(query phase),查询被向索引中的每个分片副本(原本或副本)广播. 每个分片在本地执行搜索并且建立了匹配document的优先队列(priority queue). ...
- kubernetes集群搭建(1):环境准备
了解kubernets 本次搭建采用的是1个master节点,2个node节点,一个私有docker仓库 1.设置各节点ip信息 2.设置hostname(其它节点也需修改) vi /etc/sysc ...
- Javascript 实现[网红] 时间轮盘
话不多说,先上图. 成品链接 大致效果如上图,接下来就开始制作吧. HTML部分: 我们需要将容器旋转rotate使之以圆点为中心. 怎么转呢,请看图. 将同一级的容器用一个大的容器包裹起来,绝对定位 ...
- python中基于queue的打印机仿真算法
使用打印机的模型是queue中最经典的应用之一,这里就回顾一下queue在这里的使用方法和 起的重要作用. 为了仿真打印状态,这里需要把真实环境中的三个物理模型要建模出来,分别是:打印者,打印 任务, ...