HTML5项目笔记3:使用Canvas设计离线系统的Logo

HTML5 的Cavans API可以动态来展示图形、图表、图像以及动画,我们的这个离线系统中,主要用来设计Logo用的。在网页上使用Canvas的时,他会创建一块矩形区域,默认情况下宽为300像素,高为150像素,当然,可以自定义。

因为我们离线系统主要职责用于在离线的情况下的工作系统,如在上面写工作日志,工作计划,和保存项目的评估数据;在网络在线的情况下与服务器交互,并将数据保存到Server的数据库中。所以我们的这个离线系统被命名为OFLMAIL,我们就根据这个名字来设计Logo。

canvas中的坐标是从左上角开始的,X轴从左到右横向延伸,Y轴从上到下垂直延伸。通过坐标的刻量度来定位它的位置。

我们先在页面上放置一个canvas元素:

<canvas id="canvas" width="380" height="35">Sorry, canvas not supported...</canvas>

使用canvas编程,首先要获取其上下文context。

function MakeLogo() {

var canvas = document.getElementById("canvas");

if (canvas.getContext) {

var ctx = canvas.getContext("2d");

}

}

我们的第一个字是 O ,所以我们先把 O 字符画出来,使用画圆函数即可:

context . arc(x, y, radius, startAngle, endAngle, anticlockwise)

参数分别是:

X:横轴坐标位置 ;

Y:纵轴坐标位置 ;

圆开始的角度 ;

圆闭合的角度 ;

是否逆时针绘制(true or false) ;

ctx.arc(17, 17, 15, 0, 9.42, true); // 开始画圆

ctx.lineWidth = 3; //线条的粗细程度

ctx.lineJoin = ‘round‘;返回或设置线段的连接方式,默认为miter


miter


线段在连接处外侧延伸直至交于一点,为默认值,外延效果受miterLimit的值影响,当外延交

点距离大于限制值时,则表现为bevel风格


round


连接处是一个圆角,圆的半径等于线宽


bevel


连接处为斜角

ctx.lineCap = ‘round‘;//context.lineCap 返回或设置线段的箭头样式,仅有三个选项:butt(默认值),round,square;


butt


每根线的头和尾都是长方形,也就是不做任何的处理,为默认值


round


每根线的头和尾都增加一个半圆形的箭头


square


每根线的头和尾都增加一个长方形,长度为线宽一半,高度为线宽

ctx.strokeStyle = ‘#23A1DD‘;//填充的颜色

ctx.shadowBlur = 4; //阴影模糊程度,默认为0,数值越大,模糊程度越高,感觉越明显

ctx.shadowColor = ‘#909090‘; //阴影颜色

ctx.shadowOffsetX = 1; //横轴的阴影像素

ctx.shadowOffsetY = 1; //纵轴的阴影像素

//创建字符F

ctx.moveTo(41,35); //将数据上下文的位置移动到(41,35)的坐标位置

ctx.lineTo(41, 2); //将数据上下文的位置移动到(41,35)的坐标位置

ctx.lineTo(61,2);

ctx.moveTo(41,15);

ctx.lineTo(71,15);

ctx.stroke();//stroke方法使用lineWidth,lineCap,lineJoin,以及strokeStyle对所有的子路径进行填充

ctx.save();//保存数据上下文

效果如下:

//继续在上面描画L和M字符

ctx.moveTo(77, -1); //Create the L

ctx.lineTo(77, 32);

ctx.lineTo(102, 32);

ctx.moveTo(103, 34); //Create the M

ctx.lineTo(103, 0);

ctx.lineTo(120, 20);

ctx.lineTo(137, 0);

ctx.lineTo(137, 34);

最后效果如下:

// 这时我们要在上面填充一个图片,来代替A字符,

// context.beginPath() //清空子路径

// context.closePath() //闭合路径

ctx.beginPath(); //开始执行路径,这样做的好处是清除当前的路径.开始执行新的路径,原来的一些设定都会被清除

ctx.moveTo(145, 2);

var img1 = new Image();

img1.src = "../Images/1.png";

img1.onload = function () {

ctx.drawImage(img1, 145, 2);

//drawImage函数的参数,drawImage(image,dx,dy)

//image:传入图像 dx:左坐标  dy:左坐标

ctx.stroke();

ctx.save();

}

最后效果如下:

当然,这个三角形图片也可以直接用context画出来,我们这边有图片,直接用图片载入就行了。

最后,我们运用同样的方法,完成上面那个Logo的剩余部分:

ctx.beginPath(); //Create the I

ctx.shadowBlur = 4;

ctx.shadowOffsetX = 0;

ctx.shadowOffsetY = 0;

ctx.moveTo(202, 3); //Create the O

ctx.strokeStyle = ‘#23A1DD‘;

ctx.fillStyle = ‘#23A1DD‘;

ctx.arc(185, 3, 3, 0, Math.PI * 2, true);

ctx.fill();

ctx.save();

ctx.beginPath();

ctx.moveTo(185, 35);

ctx.lineTo(185, 10);

ctx.moveTo(200, 0);

ctx.lineTo(200, 33);

ctx.lineTo(222, 33);

ctx.save();

ctx.stroke();

ctx.beginPath();

ctx.shadowBlur = 1;

ctx.shadowOffsetX = 0;

ctx.shadowOffsetY = 0;

最终我们的小清新Logo是这样子的:

根据W3C建议,如果只是简单的文字和图片的描述,用 H 标签就可以解决了,图片也可以用其他元素内嵌到标签里面。 所以我们这个图标用canvas 动态生成有点更繁琐,但是在多元化的Logo图标中,就是要用到canvas的一些特性,如:

转换:Transformations,

context.rotate(angle)

context.scale(float x, float y);

横轴和纵轴的放大或缩小,1.0 是 1:1的比例, 数值越大,放大越大。

如:context.scale(1.0,1.0):

context.scale(5.0,5.0):

context.translate(x, y) //可以理解为偏移,向x,y方向偏移指定的量,其用来移动Canvas的原点到一个指定的值

context.strokeStyle = "#9CFF00";

context.translate(50 + j * 100, 50 + i * 100);

drawSpirograph(context, 20 * (j + 2) / (j + 1), -8 * (i + 3) / (i + 1), 10);

context.restore();

Canvas API还提供了很多的函数,用来协助处理和设计各种各样的图像。

还有一个比较有趣的就是动画了,在HTML5 Canvas API 中,Canvas的清除矩形功能是创建动画和游戏的核心功能。通过反复废置和清除Canvas片段,就可以实现动画效果,大家不妨试一下。

时间: 2024-11-03 22:07:21

HTML5项目笔记3:使用Canvas设计离线系统的Logo的相关文章

HTML5项目笔记5:使用HTML5 WebDataBase设计离线数据库

基于HTML5的Web DataBase 可以让你在浏览器中进行数据持久地存储管理和有效查询,假设你的离线应用程序有需要规范化的存储功能,那么使用Web DataBase,可以使你的应用程序无论是在离线或者在线或者网络不通畅情况下都可以将数据保存在客户端. 下面是HTML5 DataBase中两个不同的DataBase的比较,摘自http://www.html5rocks.com/en 上面的一篇文章. 我们这边使用WebSQL来设计和编写底层服务,W3C 的 WebDatabase 规范中说这

HTML5项目笔记2:离线系统表单设计

在这个离线系统中,表单无疑是构成这个离线系统的视图部分,作为最前端,与客户的操作最密切相关的一块,所以我们有必要先了解一下HTML5的Forms API,它有如下特性: 表单仍然使用Form元素作为容器,我们可以在其中设置基本的提交性质: 用户或者开发人员提交页面的时候,表单仍用于向服务器端发送表单中控件的值: 沿用之前的表单控件及其使用方法,并不断发展和增加新的控件和功能: 可以用脚本操作表单控件: HTML5包含了大量的新的API和元素类型,如下: 新的输入型控件: 类型 用途 input 

HTML5项目笔记1:项目准备和工具使用

公司的 New Case,有需要离线应用工作系统这一块,目标是网络无论在线或离线情况下都可以执行系统操作,这样员工在无网络的情况下依然可以执行公司的项目任务,进行表单填报和数据的客户端保存,并在网络通畅的时候与服务端进行交付和数据通信.整体设计经过讨论使用HTML5的功能开发,并指定用户使用特定的浏览器. 该系统包含了HTML5的Form API(表单),WebStorage API,Communication API(用于跨域访问),WebDataBase API,File System AP

HTML5项目笔记7:使用HTML5 WebStorage API构建与.NET对应的会话机制

HTML5的Web Storage API,我们也称为DOMStarage API,用于在Web请求之间持久化数据.在Web Starage API 出现之前,我们都是将客户端和服务端之间的交互数据存储在远程服务器上,随着Web Starage API的出现,我们可以在客户端存储我们重复访问的交互数据,用户在打开浏览器的时候,可以快速地读取到数据,减少了用户等待,数据流量. 在Web Starage 出现之前,我们在客户端存储数据一般使用Cookie,用于客户端和服务端之间保存会话标识符,同时可

HTML5项目笔记6:使用HTML5 FileSystem API设计离线文件存储

在移动环境或者离线环境中,WebDataBase 虽然能够存储并有效地管理和维护客户端的数据集合,但是仍不能满足对包含大段数据文件的存储和多种不同格式文件的保存,于是我们就需要离线的文件管理系统来维护我们工作了,基于HTML5的FileSystem API 就充当这这个角色. 通过这个FileSystem API,我们的Web应用程序可以阅读,浏览,编辑和操纵本地文件系统. FileSystem API的主要功能有: Reading and manipulating files: File/Bl

HTML5项目笔记4:使用Audio API设计绚丽的HTML5音乐播放器

HTML5 有两个很炫的元素,就是Audio和 Video,可以用他们在页面上创建音频播放器和视频播放器,制作一些效果很不错的应用. 无论是视屏还是音频,都是一个容器文件,包含了一些音频轨道,视频轨道和一些元数据,这些是和你的视频或者音频控件绑定到一块的,这样才形成了一个完整的播放组件. 浏览器支持情况: 浏览器 支持情况 编解码器 Chrome 3.0 Theora . Vorbis .Ogg H.264 . AAC .MPEG4 FireFox 3.5 Theora . Vorbis .Og

HTML5读书笔记之四:Canvas高级功能

<!DOCTYPE html> <html> <head> <title>CanvasTest2</title> <meta charset="utf-8"> <link href="./css/canvas.css" rel="stylesheet" type="text/css"> <script type="text/ja

HTML5读书笔记之三:Canvas基础知识

<!doctype html> <head> <title>Canvas Test</title> <meta charset="UTF-8"> <link href="./css/canvas.css" rel="stylesheet" type="text/css"> <script type="text/javascript"

小型移动项目笔记

学习慕课网html5+css3笔记 能够独立根据设计稿进行整套项目的需求,剖析及其开发对项目开发流程需要有一个基本的 了解可以灵活 运用切图,重构,前端的知识对项目进行灵活的控制. 需求分析 项目主题 单页面的弹幕欢快的 三个页面 多页视觉放在一个网页文档 采用视觉差特效完成分页展示音乐不跟随翻页,位置固定,播放旋转,可暂停.需求的沟通与确认. 开发技能分析 移动端项目,采用html5作为项目的结构层分析网页呈现形式,直接采用css3完成网页的 表现层特效分析,采用css3完成主要特效,采用Ja