zoukankan      html  css  js  c++  java
  • HTML5项目笔记3:使用Canvas设计离线系统的Logo Hello

    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片段,就可以实现动画效果,大家不妨试一下。

     

    附件中有关于这个Logo的源码和HTML5Canvas API的书籍,可以参考一下。

    Canvas API 1.0 用户帮助文档  本文源码

  • 相关阅读:
    Developing
    debian 中的jdk
    openwrt手册编译
    下载openwrt源码
    progit 学习笔记-- 1 第一章 第二章
    nw335 debian sid x86-64 -- 6 第三方驱动
    nw335 debian sid x86-64 -- 5 使用xp的驱动
    nw335 debian sid x86-64 -- 4 realtek 提供的官方驱动
    JavaScript中介者模式
    javascript职责链模式
  • 原文地址:https://www.cnblogs.com/wzh2010/p/2511045.html
Copyright © 2011-2022 走看看