首页 > 网页制作 > html5

利用HTML5 Canvas API绘制矩形的超级攻略

admin html5 2022-02-06 02:20:41 HTML5   Canvas   矩形"

使用closePath()闭合图形
首先我们用最普通的方法绘制一个矩形。

JavaScript Code复制内容到剪贴板
  1.   
  2. "en">   
  3.   
  4.     "UTF-8">   
  5.        
  6.   
  7.   
  8.   
  9. "zh">   
  10.   
  11.     "UTF-8">   
  12.     绘制矩形   
  13.   
  14.   
  15. "canvas-warp">   
  16.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
  17.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
  18.        
  
  •   
  •   
  •   
  •   
  •   
  •   
  • 运行结果:
    2016321105129852.jpg (850×500)

    乍一看没啥问题,但是视力好的童鞋已经发现了,最后一笔闭合的时候有问题,导致左上角有一个缺口。这种情况是设置了lineWidth导致的。如果默认1笔触的话,是没有问题的。但是笔触越大,线条越宽,这种缺口就越明显。那么这种情况该怎么避免呢?
    标题已经剧透了,使用clothPath()闭合图形。

    JavaScript Code复制内容到剪贴板
    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     绘制矩形   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •   
  •   
  •   
  •   
  •   
  • 运行结果:
    2016321105204703.jpg (850×500)

    这个例子结合上节课的讲解,我们知道了绘制路径的时候需要将规划的路径使用beginPath()与closePath()包裹起来。当然,最后一笔可以不画出来,直接使用closePath(),它会自动帮你闭合的。(所以如果你不想绘制闭合图形就不可以使用closePath())

    给矩形上色
    这里我们要介绍一个和stroke()同等重要的方法fill()。和当初描边一样,我们在填色之前,也要先用fillStyle属性选择要填充的颜色。
    比如我们要给上面的矩形涂上黄色,可以这样写。

    JavaScript Code复制内容到剪贴板
    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     绘制矩形   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  • 运行结果:
    2016321105516457.jpg (850×500)

    这里需要注意的是一个良好的编码规范。因为之前说过了Canvas是基于状态的绘制,只有调用了stroke()和fill()才确定绘制。所以我们要把这两行代码放在最后,其余的状态设置的代码放在它们之前,将状态设置与确定绘制的代码分隔开。增强代码的可读性。


    封装绘制方法
    大家一定发现了,绘制矩形其实都是这样的四笔,我们每次用这种笨方法画矩形都要画这四笔有多麻烦,如果我们要花10个矩形?100个?1000个?都这样写,代码会臃肿,复用性很低。这里,我们可以使用JavaScript封装这些方法。我们知道,一个矩形可以由它的左上角坐标和其长宽唯一确定。
    JavaScript函数
    这里我们介绍一下JavaScript函数。如果有基础的同学可以跳过这一大段,直接看后面的。
    JavaScript 和 ActionScript 语言的函数声明调用一样,都是编程语言中最简单的。
    函数的作用
    函数的作用,可以写一次代码,然后反复地重用这个代码。如:我们要完成多组数和的功能。

    JavaScript Code复制内容到剪贴板
    1. var sum;      
    2. sum = 3+2;   
    3. alert(sum);   
    4.   
    5. sum=7+8 ;   
    6. alert(sum);    
    7.   
    8. ....  //不停重复两行代码   
    9.   

    如果要实现8组数的和,就需要16行代码,实现的越多,代码行也就越多。所以我们可以把完成特定功能的代码块放到一个函数里,直接调用这个函数,就省去重复输入大量代码的麻烦。
    使用函数完成:

    JavaScript Code复制内容到剪贴板
    1. function add2(a,b){   
    2.     sum = a + b;   
    3.      alert(sum);   
    4. //  只需写一次就可以   
    5.   
    6. add2(3,2);   
    7. add2(7,8);   
    8. ....  //只需调用函数就可以   
    9.   

    定义函数
    如何定义一个函数呢?看看下面的格式:

    JavaScript Code复制内容到剪贴板
    1. function  函数名( )   
    2. {   
    3.      函数体;   
    4. }   

    function定义函数的关键字,“函数名”你为函数取的名字,“函数体”替换为完成特定功能的代码。
    函数调用
    函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。一般有两种方式:

    第一种情况:在  

    第二种情况:在HTML文件中调用,如通过点击按钮后调用定义好的函数。

    这种情况以后用到了再说。
    有参数的函数
    格式如下:

    JavaScript Code复制内容到剪贴板
    1. function 函数名(参数1,参数2)   
    2. {   
    3.      函数代码   
    4. }  

    注意:参数可以多个,根据需要增减参数个数。参数之间用(逗号,)隔开。
    按照这个格式,函数实现任意两个数的和应该写成:

    JavaScript Code复制内容到剪贴板
    1. function add2(x,y)   
    2. {   
    3.    sum = x + y;   
    4.    document.write(sum);   
    5. }  

    x和y则是函数的两个参数,调用函数的时候,我们可通过这两个参数把两个实际的加数传递给函数了。
    例如,add2(3,4)会求3+4的和,add2(60,20)则会求出60和20的和。
    返回值函数

    JavaScript Code复制内容到剪贴板
    1. function add2(x,y)   
    2. {   
    3.    sum = x + y;   
    4.    return sum; //返回函数值,return后面的值叫做返回值。   
    5. }  

    这里的return和其他语言中的一样,但是在JS或者AS等弱类型语言中,返回值类型是不需要写到函数声明里的。

    至此,我们把JavaScript函数也顺便系统的说了一下。下面回到正题~
    我们也可以封装一下我们的矩形,代码如下:

    JavaScript Code复制内容到剪贴板
    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     封装绘制矩形方法   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •   
  •   
  •   
  •   
  •   
  • 运行结果:
    2016321105735875.jpg (850×500)

    使用rect()方法绘制矩形
    犹豫绘制矩形是常用的方法,所以在Canvas API中已经帮我们封装好了一个绘制矩形的方法——rect()。这个方法接收4个参数x, y, width, height,实际调用时也就是

    JavaScript Code复制内容到剪贴板
    1. context.rect(x,y,width,height);  

    基于此,我们帮刚才封装的方法优化一下。

    JavaScript Code复制内容到剪贴板
    1. function drawRect(cxt, x, y, width, height, fillColor, borderWidth, borderColor){   
    2.         cxt.beginPath();   
    3.         cxt.rect(x, y, width, height);   
    4.         //cxt.closePath();    可以不用closePath()   
    5.   
    6.         cxt.lineWidth = borderWidth;   
    7.         cxt.strokeStyle = borderColor;   
    8.         cxt.fillStyle = fillColor;   
    9.   
    10.         cxt.fill();   
    11.         cxt.stroke();   
    12. }  

    调用封装方法,绘制魔性图像
    来个有魔性的图像~
    2016321105759647.jpg (500×375)

    好,我们就拿它开刀,练练手,给咱刚封装好的方法活动活动筋骨。

    JavaScript Code复制内容到剪贴板
    1.   
    2. "zh">   
    3.   
    4.     "UTF-8">   
    5.     绘制魔性图形   
    6.   
    7.   
    8. "canvas-warp">   
    9.     "canvas" style="border: 1px solid #aaaaaa; display: block; margin: 50px auto;">   
    10.         你的浏览器居然不支持Canvas?!赶快换一个吧!!   
    11.        
      
  •   
  •   
  •   
  •   
  •   
  •   
  • 运行结果:
    2016321105841741.jpg (850×500)

    是不是很有魔性?是不是非常的酷?这段代码就不花篇幅解释了,大家自己课下琢磨琢磨,也可以尝试着用已经学过的知识去绘制一个酷酷的图像。这节课内容有点多,其实也只是介绍了四个属性和方法——closePath()、fillStyle、fill()、rect(),还有一个扩展的JavaScript函数讲解。

    Canvas实现图片圆角效果
    本规则适用于各种Canvas绘制的规则或不规则图形。

    Canvas实现图片圆角的关键是使用“纹理填充”。

    Canvas中有个名为createPattern的方法,可以让已知尺寸的图片元素转换成纹理对象,作填充用。

    举个板栗,如果实现名为test.jpg的图片圆形效果,大小100px * 100px, 则主要JS代码如下:

    JavaScript Code复制内容到剪贴板
    1. // canvas元素, 图片元素   
    2. var canvas = document.querySelector("#canvas"), image = new Image();   
    3. var context = canvas.getContext("2d");   
    4.   
    5. image.onload = function() {   
    6.     // 创建图片纹理   
    7.     var pattern = context.createPattern(image, "no-repeat");   
    8.     // 绘制一个圆   
    9.     context.arc(50, 50, 50, 0, 2 * Math.PI);   
    10.     // 填充绘制的圆   
    11.     context.fillStyle = pattern;   
    12.     context.fill();       
    13. };   
    14. image.src = "test.jpg";  

    让Canvas上下文的fillStyle属性值等于这个纹理对象就可以了。

    Canvas自带的矩形绘制API是不带圆角属性的,因此,demo中的圆角矩形使用了自定义方法。我简单瞅了瞅,要实现垂直、水平方向不同圆角大小略折腾,本着示意的目的,就没大动干戈,所以demo的圆角是对称的。
    2016321105911393.png (319×314)

    版权声明

    本文仅代表作者观点,不代表本站立场。
    本文系作者授权发表,未经许可,不得转载。
    本文地址:/web/html5/75459.html

    上一篇 : 使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
    下一篇 : 12个不为大家熟知的HTML5设计小技巧
    留言与评论(共有 0 条评论)
       
    验证码:

    热门文章

    最近发表

    标签列表

    潘少俊衡

    | 桂ICP备2023010378号-4

    Powered By EmpireCMS

    爱享小站

    中德益农

    谷姐神农

    环亚肥料

    使用手机软件扫描微信二维码

    关注我们可获取更多热点资讯

    感谢潘少俊衡友情技术支持