迅猛学习二,Canvas玩转璀璨大波浪进程图效果实
分类:前端技术

canvas图形绘制之星空、噪点与平流雾效果

2016/06/07 · HTML5 · 1 评论 · Canvas

初稿出处: 张鑫旭(@张鑫旭)   

HTML5 Canvas玩转炫酷大波浪进程图效果实例(附demo),html5canvas

正文介绍了HTML5 Canvas玩转绚烂大波浪进程图效果,具体如下:

图片 1

如上海体育地方所见,本文正是要促成地点那种效果。

出于前段时间AlloyTouch要写多少个下拉刷新的炫彩loading效果。所以首荐大波浪过程图。

先是要卷入一下大波浪图片进度组件。基本的法规是选拔Canvas绘制矢量图和图片素材合成出波浪特效。

了解quadraticCurveTo

quadraticCurveTo() 方法通过应用表示三次贝塞尔曲线的钦定调整点,向当前路线增多三个点。

JavaScript 语法:

context.quadraticCurveTo(cpx,cpy,x,y);

参数值

cpx 贝塞尔调节点的 x 坐标

cpy 贝塞尔调整点的 y 坐标

x 结束点的 x 坐标

y 截止点的 y 坐标

如:

ctx.moveTo(20,20);
ctx.quadraticCurveTo(20,100,200,20);
ctx.stroke();

通过地点代码能够绘制一条二回贝塞尔曲线,具体原理效果看下图:

图片 2

品尝绘制波浪

var waveWidth = 300,
    offset = 0,
    waveHeight = 8,
    waveCount = 5,
    startX = -100,
    startY = 208,
    progress = 0,
    progressStep = 1,
    d2 = waveWidth / waveCount,
    d = d2 / 2,
    hd = d / 2,
    c = document.getElementById("myCanvas"),
    ctx = c.getContext("2d");

function tick() {
    offset -= 5;
    progress  = progressStep;
    if (progress > 220 || progress < 0) progressStep *= -1;

    if (-1 * offset === d2) offset = 0;
    ctx.clearRect(0, 0, c.width, c.height);
    ctx.beginPath();
    var offsetY = startY - progress;
    ctx.moveTo(startX - offset, offsetY);

    for (var i = 0; i < waveCount; i  ) {
        var dx = i * d2;
        var offsetX = dx   startX - offset;
        ctx.quadraticCurveTo(offsetX   hd, offsetY   waveHeight, offsetX   d, offsetY);
        ctx.quadraticCurveTo(offsetX   hd   d, offsetY - waveHeight, offsetX   d2, offsetY);
    }
    ctx.lineTo(startX   waveWidth, 300);
    ctx.lineTo(startX, 300);
    ctx.fill();

    requestAnimationFrame(tick);
}

tick();

可以看来Infiniti运动的波浪:

图片 3

此间必要珍视,绘制的区域要比Canvas大来遮掩摇拽纠正的图像,上面使用了二零零三00的Canvas。

我们把代码clone下来可以施行把它绘制到一个大的Canvas上就足以知晓。

此地透过if (-1  offset === d2) offset = 0;来得以实现Infiniti循环。

d2正是叁个波峰 波谷的尺寸。贰个波峰 三个波谷之后又起来同样的生命周期和从0开头同样,所以能够重新载入参数为0。

了解globalCompositeOperation

globalCompositeOperation 属性表明了绘图到画布上的颜料是何许与画布桃月有些颜色组合起来的。

绘图大波浪进程图会用到:

ctx.globalCompositeOperation = "destination-atop";

destination-atop意义:画布淑节有些内容只会在它和新图片重叠的地点保留。新图片绘制于剧情之后。

当然,globalCompositeOperation还应该有多数取舍,这里不一一列举,大家能够试试设置任何的习性来调动出很炫丽的附加特效。

一体化达成

var img = new Image();
function tick() {
    ...
    ...
    ctx.fill();
    ctx.globalCompositeOperation = "destination-atop";
    ctx.drawImage(img, 0, 0);
    requestAnimationFrame(tick);
}

img.onload = function () {
    tick();
};

img.src = "asset/alloy.png";

为了代码轻易直接,这里免去了打包多个加载器的代码,直接通过new Image来设置src来加载图片。

 在绘制完矢量图之后,设置globalCompositeOperation,然后再绘制企鹅图片,绘制顺序不可能搞错。

最后

实例下载:demo

如上就是本文的全体内容,希望对大家的求学抱有利于,也希望我们不吝赐教帮客之家。

Canvas玩转绚烂大波浪进度图效果实例(附demo),html5canvas 本文介绍了HTML5 Canvas玩转光彩夺目大波浪进程图效果,具体如下: 如上海教室所见,...

canvas(画布)

1、 HTML5提供的新因素
2、 Canvas在HTML页面提供画布的功用,可以在页面中绘制各个图片
3、 canvas绘制的图形与HTML页面无关

无法通过DOM获取绘制的图形   
无法为绘制的推行绑定DOM事件   

4、 只好选择canvas提供的API
5、 主要用途

   在HTML页面中绘制图标(例如柱状图、饼状图等)
   网页游戏 - Flash技术
   使用HTML5中的canvas    

HTML5 快捷学习二 Canvas,html5canvas

本篇小说开头上课HTML5的基本作用之一:Canvas

通过Canvas能够动态变化和展现图片、图表、图像以至动画。

Canvas API成效比较多,大家将探讨最常用的效果。

咱俩先新建二个canvas看看。

图片 4

我们给canvas加三个边框,那样相比较方便看。

图片 5

能够观察, canvas会创造一块矩形区域,默许情状下转移大小是300*150像素。

在页面中加入canvas后,我们便足以经过js来随意地决定她。

诸如 增多图片、线条以致文字,也得以在里头绘图,以致参预高等动画。

Note

把canvas充任三个清淡无奇的竹签,能够透过选取CSS的秘籍来更动样式,何况部分CSS属性还是能够被canvas内的要素承接。

举例字体样式,在canvas内添Gavin字,其样式私下认可是同canvas成分本人是一模二样的。

一、三合一

多个效果与利益合成一篇文章。

有三个小同伙问小编,为什么不开个大伙儿号,今后都以活动时期,你博客小说写好后,大伙儿号再复制一份,花不了多久,同一时候传播方便飞快,打赏方便快捷,鲜明低开销高受益。

从近年来来看,就如的确那样。

唯独,就本身个人来讲,行为和照管法则总是服从内心的直觉和大方向的辅导。说不上实际的道理,便是感觉,文章的输出源假若持续三个,久远来看,带来的不解损耗必须求高于长时间的已知受益。

取巧的事务多慎思而克己,就好比本文内容,实际上,七个例外的canvas效果,直接分3篇来写,凑个小说数,扩张点浏览量其实也是无可非议的。然,想了想,有一些不像自个儿的style,内心真实的友善并不希望团结如此做,于是,就3个成效合体为一篇小说。

不容小片段的诱惑,让和煦过得更轻便。

正文的3个效果与利益都以源自己近些日子做的多少个忠实的档期的顺序,是canvas领域基本入门的一部分作用。代码笔者都非常重新梳理了下,须要注释也都抬高去了,方便大家的学习。然后,假如你有不懂的地点,请不要来问我,没错,是不要,作者并不接待你找笔者来交换,本身一点一点去弄驾驭。因为,如若连那样基本的canvas效果都不知情,笔者实在也帮不了你怎么着。倒不是说腾不出时间,而是腾不出精力,每日今日头条私信还有邮箱找小编的人还挺多,实在应接不暇。

使用canvas

  1. 在页面中定义 <canvas>
    暗中认可宽度 300*150
    效率上看似于div

    问题:
      定义canvas元素的宽度和高度
      style设置-绘制图形被拉伸
    解决方法:
       直接在canvas里写width 和height的值
    
  2. 获取<canvas>元素

     document.getElementsByTagName('canvas')[0];
     document.querySelector('canvas');
    
  3. 得到画布对象

     getContext("2d");  
     参数类型是string类型,参数必须是“2d”或“3d”(固定写法)   
    
  4. 使用Canvas提供的API

     context.fileRect(x,y,width,height);
    

文章提纲

  • 要点
  • 理论基础/前置条件
  • 详见步骤
  • 总结

二、canvas图形效果之旋转星空

图片 6

图是死的,效果是活的,IE9 浏览器下,您能够狠狠地方击这里:canvas达成的转动星空效果demo

会看出地球上方会有成都百货上千简单在逐年地绕着地球转啊转,星星在闪啊闪。

像那类密集型canvas效果,平日离不开上边那多少个至关心重视要字:实例,随机,变化与重绘,requestAnimationFrame。

原理就是:

  1. 先画贰个职位折射率随机的静态的有限实例对象;
  2. 有四个方可变动轻松地点和折射率的draw方法;
  3. 沙漏跑起来,画布不停地扫除与绘图,动画效果实现!

原理很简短。

本例子实现的2个难点在于:

  1. 月歌星稀
    少数垂直方向实际上是个伪随机,越走近地球,星星越密集,而越往上,越疏落。其算法如下:
JavaScript

var getMinRandom = function() { var rand = Math.random(); //
step的大小决定了星星靠近地球的聚拢程度, // step = Math.ceil(2 /
(1 - rand))就聚拢很明显 var step = Math.ceil(1 / (1 - rand)); var
arr = []; for (var i=0; i&lt;step; i  ) { arr.push(Math.random());
} return Math.min.apply(null, arr); };

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f4a6436b2b195965046-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4a6436b2b195965046-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f4a6436b2b195965046-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4a6436b2b195965046-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f4a6436b2b195965046-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4a6436b2b195965046-6">
6
</div>
<div class="crayon-num" data-line="crayon-5b8f4a6436b2b195965046-7">
7
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4a6436b2b195965046-8">
8
</div>
<div class="crayon-num" data-line="crayon-5b8f4a6436b2b195965046-9">
9
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4a6436b2b195965046-10">
10
</div>
<div class="crayon-num" data-line="crayon-5b8f4a6436b2b195965046-11">
11
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4a6436b2b195965046-12">
12
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f4a6436b2b195965046-1" class="crayon-line">
var getMinRandom = function() {
</div>
<div id="crayon-5b8f4a6436b2b195965046-2" class="crayon-line crayon-striped-line">
    var rand = Math.random();
</div>
<div id="crayon-5b8f4a6436b2b195965046-3" class="crayon-line">
    // step的大小决定了星星靠近地球的聚拢程度,
</div>
<div id="crayon-5b8f4a6436b2b195965046-4" class="crayon-line crayon-striped-line">
    // step = Math.ceil(2 / (1 - rand))就聚拢很明显
</div>
<div id="crayon-5b8f4a6436b2b195965046-5" class="crayon-line">
    var step = Math.ceil(1 / (1 - rand));
</div>
<div id="crayon-5b8f4a6436b2b195965046-6" class="crayon-line crayon-striped-line">
    var arr = [];
</div>
<div id="crayon-5b8f4a6436b2b195965046-7" class="crayon-line">
    for (var i=0; i&lt;step; i  ) {
</div>
<div id="crayon-5b8f4a6436b2b195965046-8" class="crayon-line crayon-striped-line">
        arr.push(Math.random());
</div>
<div id="crayon-5b8f4a6436b2b195965046-9" class="crayon-line">
    }
</div>
<div id="crayon-5b8f4a6436b2b195965046-10" class="crayon-line crayon-striped-line">
 
</div>
<div id="crayon-5b8f4a6436b2b195965046-11" class="crayon-line">
    return Math.min.apply(null, arr);       
</div>
<div id="crayon-5b8f4a6436b2b195965046-12" class="crayon-line crayon-striped-line">
};
</div>
</div></td>
</tr>
</tbody>
</table>

很大概率会返回一个数值偏小的值,于是,就可以有“月明星稀”的分布效果了。
  1. 圆弧轨迹
    骨子里比极粗略,我们套用高中时候学的圆方程式就足以了,如投注释截图所述:
    图片 7那下标题就轻松了,已知a,b, 求y相对于x的函数表明式……

Canvas(画布) - API使用

  1. API提供的工具拾贰分常见,包含成立图形、颜色、文本等

  2. 矩形

    1)绘制实心矩形

    fillRect(x,y,width,heigth)
    

    2)绘制空心矩形

    strokeRect(x,y,width,heigth)
    

    3)清除钦命区域的像素,类似于橡皮擦

    clearRect(x,y,width,height)
    
  3. 设置颜色 - 假诺在创制图像时,未有一点点名颜色,那么全数图形都会利用纯灰黄

    1)申明形状线条的颜料 - strokeStyle

    2)证明形状内部区域的颜料 - fillStyle

    3)发光度属性。可以安装画布上海体育地方片的折射率 - globalAlpha

  4. 渐变效果 - canvas扶持的渐变效果包罗线性渐变或射线渐变,并且帮衬颜色转折点

    1)在画布上创建三个渐变对象

    var grd = context.createLinearGradient(x1,y1,x2,y2)
         x1,y1 - 基准线的起点坐标值
         x2,y2 - 基准线的终点坐标值
    
    var grd = context.createRadialGradient(x1,y1,r1,x2,y2,r2) 
         x1,y1 - 第一个基准圆的元素坐标值
         r1 - 第一个基准圆的半径
    
      x2,y2,r2同上
    
    返回一个渐变对象
    

*** 注意:上边装有的坐标都以周旋于 canvas对象的坐标 ***
2)给渐变对象钦定渐变颜色值

      addColorStop(position,color)
      position - 指设置渐变颜色的位置(0-1)

  3) 将渐变对象作为画布对象的颜色

      context.fillStyle = grd;

  4) 绘制矩形

       context.fillRect(0,0,400,400);

要点

调整使用canvas API的重要性流程

操纵常用的canvas API:**例如moveTo, lineTo, beginPath, closePath,stroke,fill等**

充足明白例子

三、canvas图形效果之雪花噪点效果

图片 8

图是死的,效果这里也是死的,但并无妨碍大家零间隔围观,您能够狠狠地方击这里:canvas达成的噪点效果demo

是因为这里是静态的,所以但从那点来看,仿佛比地方星空轻巧。不过,倘使唯有看绘制一帧,那这里的噪点要比地点的星空要辛勤些,最大的难点在于对品质的把控。

如此说吗,上面的星空,总共最多就400个点(水泥灰的星星点点),不过,这里的噪点,举个例子,demo中画布大小(那作者的对讲机举个例子)是一九一六*500,此中,噪点大小是1像素*1像素,总共就有9伍仟0个绘制点,显著跟400个点完全不是三个数码级的,如若我们真正一个二个绘制下来,认定,就连Chrome这么牛步的浏览器也会以为到到显明的卡顿,怎么样优化怎么样绘制呢?

这正是本例子达成的困难:

  1. 数量与性子
    本人这里是如此管理的,固然最后的噪点大小是一九一九*500,不过,大家实际是由N块300*150的小的像瓷砖一样的小方块拼起来的。话句话说,作者骨子里只绘制了46000个点,比9陆仟0明了要小了20倍还不仅仅。那样,既满意了成效,又确认保障了品质。

切实得以实现原理为:

  1. 成立二个canvas,绘制二个300*150自由噪点图形;
  2. 把这里有着噪点的canvas以画布情势在绘制到页面上的大canvas上;

说得canvas绘图,不得不提一下不行常用的贰个drawImage()措施,语法如下:

context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

1
context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);

依次参数暗中表示为(英特网的叙说都以直译,很隐晦,笔者这边再一次陈述了下):

参数 描述
img 用来被绘制的图像、画布或视频。
sx 可选。img被绘制区域的起始左上x坐标。
sy 可选。img被绘制区域的起始左上y坐标。
swidth 可选。img被绘制区域的宽度。
sheight 可选。img被绘制区域的高度。
x 画布上放置img的起始x坐标。
y 画布上放置img的起始y坐标。
width 可选。画布上放置img提供的宽度。(伸展或缩小图像)
height 可选。画布上放置img提供的高度。(伸展或缩小图像)

本例的小的噪点区块正是通过drawImage()方法被平铺到大的canvas成分上的。

批评功底 -- canvas坐标

如下图,canvas中的坐标是从左上角起初,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延长。

最左上角坐标为 (0,0) 的点为原点。

图片 9

四、canvas图形效果之云遮云涌效果

图片 10

图是死的,效果是活的,IE9 浏览器下,您能够狠狠地方击这里:canvas完成的云遮雾涌效果demo

本例子,效果看上去要更酷一些,实际上,从技艺层面讲,跟下边包车型地铁星空旋转效果差十分的少一模二样,恐怕还要比星空更简便一些,因为其移动轨迹直来直往,无需转圈圈。

那干什么看起来更酷呢,重要在于以为上坡雾很难去模拟。

没错,谷雾确实很难用代码直接绘制出来,实际上,这里的云烟,是三个png图片,是选择画笔在PS里绘制导出来的。

旋转星空的例证,大家是选拔canvas的fillRect办法绘制了点儿,而本例子,则是接纳方面提到的drawImage()艺术把谷雾图片绘制进来了。

别的的位移啊,折射率变化什么的,原理都以类似。

本例子的难处首要在于模拟是还是不是丰富真实:

  1. 高处不胜寒
    越往上,平流雾越淡,实际上正是越接近上方,发光度越低;
// 越靠近边缘,透明度越低 // 纵向透明度变化要比横向的明显 this.alpha
= (1 - Math.abs(canvasWidth*0.5 - this.x) / canvasWidth) * (0.7 -
Math.abs(canvasHeight*0.5 - this.y) / canvasHeight);

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f4a6436b3d419634939-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f4a6436b3d419634939-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f4a6436b3d419634939-3">
3
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f4a6436b3d419634939-1" class="crayon-line">
// 越靠近边缘,透明度越低
</div>
<div id="crayon-5b8f4a6436b3d419634939-2" class="crayon-line crayon-striped-line">
// 纵向透明度变化要比横向的明显
</div>
<div id="crayon-5b8f4a6436b3d419634939-3" class="crayon-line">
this.alpha = (1 - Math.abs(canvasWidth*0.5 - this.x) / canvasWidth) * (0.7 - Math.abs(canvasHeight*0.5 - this.y) / canvasHeight);
</div>
</div></td>
</tr>
</tbody>
</table>
  1. 缭绕
    所谓“缭绕”,正是运动看似不抱有规律性。要精通,不论什么事有轨道有套路的移动都以有规律性地,你说那混合雾上上下下,左左右右运动太过度规律,效果就能够压缩,不过,真的未有规律又倒霉通过代码调节移动轨迹。因而,为了搞到三个好像缭绕效果的移位函数,还真是烧了好多脑部细胞。

详见步骤 -- 使用HTML5 canvas API

五、canvas动作效果与结语

正文四个例证都是canvas 2D效果,是入门学习十二分好的例证。

canvas特别适合完毕密集型图形和动画,能够把质量优势给发挥出来,因为就是一块画布渲染;其他一些便是省流量,例如说首个例证的噪点效果,要是是大同小异效果一九一六*500的png图片,科科,小编特地保存了下,286K,1K的代码PK 286K的图纸,鲜明是完爆啊!

canvas还支持3D效果,也就是webGL, 亦称3D Canvas graphics, IE11 支持,目前Android 4.*随便版本都还不协理,业国内资本深的相关库正是threejs了。

唯独,小编没商讨过,也没兴趣,不是自身的方向。

好了,就这几个,谢谢阅读。

1 赞 7 收藏 1 评论

图片 11

检查实验浏览器扶助景况

我们做两件事

图片 12

浏览器协助

图片 13

把IE调成IE7形式测量试验下不协助的情事:

图片 14

 

接纳canvas画一条对角线

对地点的例子做一些修改

图片 15

在canvas中绘制一条对角线

图片 16

图片 17

基于上边的js代码,归咎出利用canvas API的首要流程

Note

此处有一个坑。作者原先将安装canvas长度宽度放在了style里面。如下图。

图片 18

出现难点的原由:

canvas的width和height是画布的莫过于增长幅度和可观,绘制的图片在这些画布上面。

canvas的style的width和height是canvas在浏览器中被渲染的冲天和幅度。

故此必要在意设置宽度时要在外部设置。

选取调换(transformation)画对角线

上面来看canvas上绘制图像的别的一种方式:使用转换(transformation)。

transformation是落到实处复杂canvas操作的最棒格局(就单个下边绘制对角线来讲看起来是越发千头万绪了点)

理解 变换(transformation):

把它当成是介意开辟职员发出的授命和canvas呈现结果里面包车型客车叁个校正层 (modification layer)

注意 不管在开采中是或不是使用变换,改良层始终存在。

各样绘制操作的结果突显在canvas上事先都要经过立异层去匡正。

就算这么做扩张了额外的复杂性,但却为绘制系统增添了进一步有力的效能。

Note

不在代码中调用调换函数并不表示可以升级canvas的性质。

canvas在进行的时候,调换会被表现引擎隐式调用,那与开采职员是否间接调用非亲非故。

可接纳代码的一条第一提议:

诚如绘制都应从原点起头,应用调换(缩放,平移,旋转等),然后不断修改代码直至到达梦想的成效。

示例

图片 19

这么些代码的结果和方面是一模二样的。

我们瞩目那二种代码的异样:

对第二种格局, translate(70,140) 代表将原点移到 (70,140) 这些职位。

相当于说,接下去全体操作都是相对于 (70,140) 这一个职位来操作的。

先是种意况是(70,140)à(140,70),

第三种状态是(0,0)à(70,140)à(70,-70)

其次种情景的(70, -70)是相对于新的原点(70,140)点以来的,绝对于一始发的原点坐标是(70 70,-70 140),很轻易见到这三种情形的结果是等价的,精通了吗?

大家体会一下。

我们汇总一下方面包车型地铁操作:

画树

今昔学习某些复杂点的图形。

日前绘制的一条对角线算是一条轻松路线。

实则路径能够很复杂:多条线、曲线段、以致是子路线。

设若想在canvas上绘制放肆形状,那么您需求入眼关心路线API

遵照规矩,不论初始绘制何种图形,第三个须要调用的就是beginPath, 对于canvas来说,beginPath函数的最大用处是canvas须求因此来计量图形的中间和外部范围,以便形成后续的描边和填充。

路线会追踪当前坐标,暗中同意值是原点。

调用beginPath之后,就可以运用context的各类法子来绘制想要的模样了。

到如今截止已经运用了多少个简易的context路径函数。

moveTo(x,y)

lineTo(x,y)

地方七个函数的界别是:moveTo就好像聊到画笔,移动到新岗位;

而lineTo告诉canvas用画笔从纸上的旧坐标画条直线到新坐标。

在乎,不管调用的是哪三个,都不会真的画出图形,因为大家还尚未调用stroke或然fill函数。

此时此刻大家只是概念路线的职位,以便前边绘制时使用。

除此以外再介绍三个路线函数closePath, 那么些函数和lineTo很像,独一的异样是会将路线的序幕坐标 自动作为 目的坐标。

clothPath还也许会打招呼canvas当前绘制的图片已经完全关闭也许形成了截然密闭的区域,那对未来的填写和描边都卓殊管用。

那会儿,能够在已部分路径中一而再开创别的的子路线,也许任何时候调用beginPath重新绘制新路径并完全铲除在此以前的全部渠道。

1.绘制树冠

制图树冠的函数

 

图片 20

为了直观的显得图线的增势,笔者画了个从起头点到极点的草图,如下

图片 21

在canvas上画树的函数:

图片 22

末段结果如下

图片 23

下边大家对树冠做一些鼓吹,在stroke以前拉长如下代码

图片 24

成为了更加粗更平整的茶绿线条。

图片 25

进而美化,将关闭路线内部填充为草绿

图片 26

 

图片 27

小心,左侧的边框也变细了。

当大家使用先描边后填充的方法,会填充一半的边框。

设若要不填充边框,要求动用先填充后描边的主意,如下。

图片 28

图片 29

2. 采用fillRect画树干(填充矩形区域)

咱俩先把translate的数值改一下,让出树干的职位。

context.translate(130,150);

由此fillRect(x, y, 宽, 高)来画出树干。

专一,这段要在context.restore();前边,不然画的任务就错了。

图片 30

末段结出:

图片 31

Note

fillRect(x,y,width,height)

图片 32

总结

大家开首能够看出canvas的威力,能够绝不依据第三方技巧扩充绘图。

当然近年来画的东西还比较轻便,下篇文章将会在这里棵树的根基上进入别的因素和特殊效果,完毕一幅立春动画效果的林荫小道图。

好了,明天就到此处,招待大家多多商酌,让下一篇文章越来越好:)

 

飞速学习二 Canvas,html5canvas 本篇小说开首上课HTML5的宗旨作用之一:Canvas 通过Canvas能够动态变化和彰显图片、图表、图像以致动画。...

本文由pc28.am发布于前端技术,转载请注明出处:迅猛学习二,Canvas玩转璀璨大波浪进程图效果实

上一篇:历时八年html5完工,浏览器大战能消停吗 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • 附操作日志类,YII2框架便捷火速的贯彻顾客后台
    附操作日志类,YII2框架便捷火速的贯彻顾客后台
    李秉骏:在Phonegap下实现oAuth认证 2012/07/18 · HTML5 · 2评论 · 来源:李秉骏     ·HTML5 正文由李秉骏(@CashLee李秉骏)投稿于伯乐在线,也招待任何朋友投稿
  • 深入探究HTML5的History,前生今世
    深入探究HTML5的History,前生今世
    HTML 5 History API的”前生今世” 2014/10/23 · HTML5 ·HTML5 原文出处:tuts    译文出处:淡忘浅思的博客(@dwido)    History是有趣的,不是吗?在之前的HTML版本
  • javascript操作referer详细解析,你知道吗
    javascript操作referer详细解析,你知道吗
    危险的 target=”_blank” 与 “opener” 2018/09/05 · JavaScript· target 原来的书文出处:创宇前端    在网页中选用链接时,假设想要让浏览器自动在新的标签页张
  • 你该知道的字体
    你该知道的字体
    有趣的CSS题目(12):你该知道的字体 font-family 2017/01/06 · CSS · 1评论 ·字体 本文作者: 伯乐在线 -chokcoco。未经作者许可,禁止转载! 欢迎加入伯乐在线
  • 深入浅出妙用
    深入浅出妙用
    深入浅出妙用 Javascript 中 apply、call、bind 2015/09/24 · JavaScript· 4 评论 ·apply,bind,call 本文作者: 伯乐在线 -chokcoco。未经作者许可,禁止转载! 欢迎加入伯乐