美文网首页IT修真院-前端
如何使用canvas绘图

如何使用canvas绘图

作者: xianxiaobo | 来源:发表于2017-08-15 17:52 被阅读37次

    大家好,我是IT修真院成都分院第6期的学员先小波,一枚正直纯洁善良的WEB前端程序员。

    今天给大家分享一下,修真院官网JS任务11,深度思考中的知识点——如何使用canvas?(初阶)

    1.背景介绍

    Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表、动画等。

    没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和Flash进行交互。有了Canvas,我们就再也不需要Flash了,直接使用JavaScript完成绘制。

    2.知识剖析

    2.1 canvas的兼容性

    Internet Explorer 9+, Firefox, Opera, Chrome 以及 Safari 支持 标签。

    2.2 canvas的一些基本属性

    首先得说下width和height属性了,这是在canvas中必备的属性。

    width:画布的高度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口高度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。;默认值是 300。

    height:画布的宽度。和一幅图像一样,这个属性可以指定为一个整数像素值或者是窗口宽度的百分比。当这个值改变的时候,在该画布上已经完成的任何绘图都会擦除掉。默认值是 width的一半。

    123

    如何利用dom绘出一些简单的图

    在这里就需要用到一些属性:

    fillStyle:设置或返回用于填充绘画的颜色、渐变或模式。比如说绘制一个渐变色的矩形

    fillRect(x,y,width,height):从坐标(x,y)处绘制一个长度为width,宽度为height的填充矩形

    demo1 制作渐变矩形

    var a=document.getElementById("myCanvas");

    var demo1=a.getContext("2d");

    var my_gradient=demo1.createLinearGradient(0,0,0,170);

    my_gradient.addColorStop(0,"red");

    my_gradient.addColorStop(1,"blue");

    demo1.fillStyle=my_gradient;

    demo1.fillRect(20,20,150,100);

    strokeStyle:设置或返回用于笔触的颜色、渐变或模式。

    strokeRect(x,y,width,height):从坐标(x,y)处绘制一个长度为width,宽度为height的矩形边框

    line-width:表示边框宽度

    canvas里面还可以添加一些文本属性,比如说font,textAlign,textBaseline等等

    demo2制作渐变矩形框

    var b=document.getElementById("myCanvas");

    var demo2=b.getContext("2d");

    var gradient=demo2.createLinearGradient(0,0,170,0);

    gradient.addColorStop("0","#FFF");

    gradient.addColorStop("0.5","blue");

    gradient.addColorStop("1.0","red");

    // 用渐变进行填充

    demo2.strokeStyle=gradient;

    demo2.lineWidth=10;//边框宽度

    demo2.strokeRect(20,20,150,100);

    demo3 使用font, textAlign属性

    var c=document.getElementById("myCanvas");

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

    // 在位置 150 创建蓝线

    ctx.strokeStyle="blue";

    ctx.moveTo(150,20);

    ctx.lineTo(150,170);

    ctx.stroke();

    ctx.font="15px Arial";

    // 显示不同的 textAlign 值

    ctx.textAlign="start";

    ctx.fillText("textAlign=start",150,60);

    ctx.font="40px Arial";

    ctx.textAlign="end";

    ctx.fillText("textAlign=end",150,80);

    ctx.textAlign="left";

    ctx.fillText("textAlign=left",150,100);

    ctx.textAlign="center";

    ctx.fillText("textAlign=center",150,120);

    ctx.textAlign="right";

    ctx.fillText("textAlign=right",150,140);

    2.3 canvas中的一些常用方法

    1).lineTo():添加一个新点,然后在画布中创建从该点到最后指定点的线条

    2).moveTo():把路径移动到画布中的指定点,不创建线条

    3).stroke():绘制已定义的路径

    demo4 canvas显示路径;

    var canvas = document.getElementById('myCanvas'); //获取上下文对象,canvas很多常用方法都是基于这个对象实现的

    var context = canvas.getContext("2d"); //目前参数只有2d

    context.lineWidth = 5;  //线条宽度

    context.moveTo(10,10);  //光标移到这点

    context.lineTo(10,50);  //下一点坐标

    context.lineTo(100,50);  //下一点坐标

    context.stroke();        //绘制路径

    4).beginPath():起始一条路径,或重置当前路径

    5).arc():创建弧/圆线

    6).closePath():创建从当前点回到起始点的路径

    demo5.绘制三角形

    var c=document.getElementById("myCanvas");

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

    ctx.beginPath();

    ctx.moveTo(20,20);

    ctx.lineTo(20,100);

    ctx.lineTo(70,100);

    ctx.closePath();

    ctx.stroke();

    3.常见问题

    图像能不能放到canvas上?

    4.解决方案

    可通过使用drawImage(image,x,y)就可以将图像放到canvas上,然后在canvas内设置宽高,就可以将图像放到画布中。

    demo6.利用canvas渲染图片

    var c=document.getElementById("myCanvas");

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

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

    img.onload = function() {

    ctx.drawImage(img,0,0);

    }

    5.编码实战

    6.扩展思考

    在上个demo中发现如果设置canvas标签css的width,height与在canvas中设置width,height不一样,这是为什么?

    高度和宽度是用于绘图的逻辑帆布尺寸和是不同的距离style.height和style.widthCSS属性。如果不设置CSS属性,画布的本征大小将被用作显示大小; 如果设置CSS属性,并且它们与画布尺寸不同,则您的内容将在浏览器中缩放。

    7.参考文献

    参考一:https://stackoverflow.com/questions/4938346/canvas-width-and-height-in-html5canvas中width,height与style width,style height的区别

    参考二:http://www.runoob.com/html/html5-canvas.htmlHTML5 Canvas | 菜鸟教程

    参考三:http://www.w3school.com.cn/html5/html5_canvas.aspW3C HTML5标签Canvas

    8.更多讨论

    1.canvas能够使图像产生放大缩小效果吗?

    2.canvas元素内部的width和height属性能使用rem单位吗?

    相关文章

      网友评论

        本文标题:如何使用canvas绘图

        本文链接:https://www.haomeiwen.com/subject/rdyvrxtx.html