美文网首页
Canvas 属性

Canvas 属性

作者: PYFang | 来源:发表于2018-05-07 14:04 被阅读0次

    属性

    1、canvas

    CanvasRenderingContext2D.canvas 属性是只读的,是HTMLCanvasElement的反向引用,如果没有<Canvas> 元素与之对应,对象值为null

    语法:ctx.canvas

    示例:
    给出<canvas>元素

    //html
    <canvas id="canvas"></canvas>
    //JS
    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    ctx.canvas
    

    2、fillStyle

    .fillStyle 描述颜色和样式的属性,默认值是#000 黑色

    语法:
    ctx.fillStyle = color
    ctx.fillStyle = gradient
    ctx.fillStyle = pattern

    选项:
    color 被转换成CSS<color>颜色值
    gradient 线性渐变或者放射性渐变
    patern 可重复图像

    示例:

    • 使用 fillStyle 属性设置不同的颜色
    //html
    <canvas id="canvas"></canvas>
    //js
    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.fillStyle = "blue"
    ctx.fillRect(10, 10, 100, 100)
    

    效果图:


    fillStyle.png
    • fillStyle使用 for循环的例子
      我们使用两个 for循环绘制一个矩形表格,每个单元格都有不同的颜色。 最终的结果图像看起来像屏幕截图,其实没有令人惊叹的事情发生。我们使用两个变量ij为每一个单元格生成唯一的RGB颜色,并且只改变红色和绿色的数值。蓝色通道的值是固定不变的。通过修改这些通道,你能生成各种各样的调色板。通过逐步地增加,你能实现类似 Photoshop 的调色板。
    //html
    <canvas id="canvas"></canvas>
    //js
    var ctx = document.getElementById('canvas').getContext('2d')
    for (var i=0;i<6;i++){
      for (var j=0;j<6;j++){
        ctx.fillStyle = 'rgb(' + Math.floor(255-42.5*i) + ',' +
                         Math.floor(255-42.5*j) + ',0)'
        ctx.fillRect(j*25,i*25,25,25)
      }
    }
    

    效果图:


    fillStyle-for.png

    3、font

    设置当前字体样式的属性。与此同时CSS font使用相同,默认字体是 10px sans-serif.

    语法:ctx.font = value

    示例:
    设置不同的字体大小和字体种类

    //js
    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.font = "48px serif"
    ctx.strokeText("Hello world", 50, 100)
    

    效果图:


    font.png

    4、globalAlpha

    描述在canvas上绘图之前,设置图形和图片透明度的属性。 数值的范围从0.0(完全透明)到1.0 (完全不透明)。

    语法:ctx.globalAlpha = value

    选项:
    value 数字在 0.0 (完全透明)和 1.0 (完全不透明)之间。 默认值是 1.0。 如果数值不在范围内,包括InfinityNaN无法赋值,并且 globalAlpha 会保持原有的数值。
    示例:
    绘制了2个半透明的矩形

    //js 
    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.globalAlpha = 0.5
    
    ctx.fillStyle = "blue"
    ctx.fillRect(10, 10, 100, 100)
    
    ctx.fillStyle = "red"
    ctx.fillRect(50, 50, 100, 100)
    

    效果图:


    globalAplha.png

    5、globalComponiteOperation

    设置要在绘制新形状时应用的合成操作的类型,其中type是用于标识要使用的合成或混合模式操作的字符串。

    语法:ctx.globalCompositeOperation = type

    示例:
    绘制2个矩形在重叠时相互排斥的情况。

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    ctx.globalCompositeOperation = "xor"
    ctx.fillStyle = "blue"
    ctx.fillRect(10,10,100,100)
    ctx.fillStyle = "red"
    ctx.fillRect(50,50,100,100)
    

    效果图:


    blobalComponiteOperation.png

    6 、lineCap

    指定如何绘制每一条线段末端的属性。有3个可能的值,分别是:butt, round square。默认值是 butt

    语法:
    ctx.lineCap = "butt"
    ctx.lineCap = "round"
    ctx.lineCap = "square"

    选项:
    butt 线末端以方形结束
    round 线段末端以圆形结束
    square 线段末端以方形结束,但是增加了一个宽度和线段相同,高度是线段厚度一半的矩形区域
    示例:
    使用 lineCap 属性绘制以圆形结尾的线段。

    var canvas = document.getElementById("canvas");
    var ctx = canvas.getContext("2d");
    
    ctx.beginPath()
    ctx.moveTo(0,0)
    ctx.lineWidth = 15
    ctx.lineCap = "round"
    ctx.lineTo(100, 100)
    ctx.stroke()
    

    效果图:


    lineCap.png

    7、lineDashOffset

    设置虚线偏移量的属性,例如可以实现跑马灯的效果

    语法:ctx.lineDashOffset = value

    value 偏移量是float精度的数字。初始值为0.0
    示例:
    使用 lineDashOffset 属性绘制虚线

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.setLineDash([4,16])
    ctx.lineDashOffset = 2
    
    ctx.beginPath()
    ctx.moveTo(0,100)
    ctx.lineTo(400,100)
    ctx.stroke()
    

    效果图:


    lineDashOffset.png

    8、lineJoin

    用来设置2个长度不为0的相连部分(线段,圆弧,曲线)如何连接在一起的属性(长度为0的变形部分,其指定的末端和控制点在同一位置,会被忽略)。

    语法:
    ctx.lineJoin = "bevel"
    ctx.lineJoin = "round"
    ctx.lineJoin = "miter"

    选项:
    此属性有3个值:round, bevel ,miter。默认值是 miter。注意:如果2个相连部分在同一方向,那么lineJoin不会产生任何效果,因为在那种情况下不会出现连接区域。

    round 通过填充一个额外的,圆心在相连部分末端的扇形,绘制拐角的形状,圆角的半径是线段的宽度。
    bevel 在相连部分的末端填充一个额外的以三角形为底的区域,每个部分都有各自独立的矩形拐角。
    miter 通过延伸相连部分的外边缘,使其相交于一点,形成一个额外的菱形区域。这个设置可以通过miterLimit属性看到效果。
    示例:

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.lineWidth = 10
    ctx.lineJoin = "round"
    ctx.beginPath()
    ctx.moveTo(0,0)
    ctx.lineTo(200, 100)
    ctx.lineTo(300,0)
    ctx.stroke()
    

    效果图:


    lineJoin.png

    9、lineWidth

    设置线段厚度的属性(即线段的宽度)。当获取属性值时,它可以返回当前的值(默认是1.0)。当给属性值赋值时,0,负数,Infinity 和NaN 都会被忽略;除此之外,都会被赋予一个新值。

    语法:ctx.lineWidth = value

    选项:
    value 描述线段宽度的数字。0,负数,Infinity 与NaN会被忽略

    示例:

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.beginPath()
    ctx.moveTo(0,0)
    ctx.lineWidth = 15
    ctx.lineTo(100,100)
    ctx.stroke()
    

    效果图:


    lineWidth.png

    10、miterLimit

    设置斜接面限制比例的属性。 当获取属性值时, 会返回当前的值(默认值是10.0 )。当给属性值赋值时,0,负数,Infinity 和NaN 都会被忽略;除此之外,都会被赋予一个新值。

    语法:ctx.miterLimit = value

    value 斜接面限制比例的数字。0,负数,Infinity 和NaN 都会被忽略

    简释:

    ctx.lineJoin = "miter" // "miter" > "round" ) "bevel" ]

    只有当lineJoin 显示为">"时,miterLimit 才有效。边角的角度越小,斜接长度就会越大。为了避免斜接长度过长,我们可以使用miterLimit属性。如果斜接长度超过过miterLimit的值,边角会以lineJoin"]"类型来显示

    11、shadowBlue

    描述模糊效果程度的属性;它既不对应象素值也不受当前转换矩阵的影响。默认值是0

    语法: ctx.shadowBlue = level

    level 描述模糊效果程度的,float 类型的值,默认值是0 。负数,Infinity或者 NaN 都会被忽略

    示例:

    使用 shadowblur 属性设置模糊阴影。 注意:只有设置shadowColor属性值为不透明,阴影才会被绘制。

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.shadowColor = "black"
    ctx.shadowBlur = 10
    
    ctx.fillStyle = "white"
    ctx.fillRect(10,10,100,100) 
    

    效果图:


    shadowBlue.png

    12、shadowColor

    描述阴影颜色
    示例:
    使用 shadowColor 属性设置阴影的颜色。 注意:shadowColor属性设置成不透明的,并且shadowBlurshadowOffsetX或者shadowOffsetY属性不为0,阴影才会被绘制

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.shoadowColor = "black"
    ctx.shadowOffsetY = 10
    ctx.shadowOffsetX = 10
    
    ctx.fillStyle = "green"
    ctx.fillRect(10,10,100,100)
    

    效果图:


    shoadowColor.png

    13 、shadowOffsetX

    描述阴影水平面偏移距离

    语法: ctx.shadowOffsetX = offset
    offset 阴影水平偏移距离的float 类型的值。默认值是0。Infinity或者NaN 都会被忽略

    示例:
    使用 shadowOffsetX 属性设置阴影的水平偏移量。注意:将shadowColor属性设置成不透明,阴影才会被绘制。

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.shadowColor = "black"
    ctx.shadowOffsetX = 10
    ctx.shadowBlur = 10
    
    ctx.fillStyle = "green"
    ctx.fillRect(10,10,100,100)
    

    效果图:


    shadowOffsetX.png

    14、shadowOffsetY

    描述阴影垂直偏移距离

    语法:ctx.shadowOffsetY = offset
    offset 阴影垂直偏移距离的float 类型的值。默认值是0。Infinity或者NaN 都会被忽略
    示例:

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.shadowColor = "black"
    ctx.shadowOffsetY = 10
    ctx.shadowBlur = 10
    
    ctx.fillStyle = "green"
    ctx.fillRect(10, 10, 100, 100)
    

    效果图:


    shadowOffsetY.png

    15、strokeStyle

    描述画笔(绘制图形)颜色或者样式的属性。默认值是 #000 (black)

    语法:
    ctx.strokeStyle = color
    ctx.strokeStyle = gradient
    ctx.strokeStyle = pattern

    选项:
    color 转换成CSS<color>
    gradient 线性渐变或放射性渐变
    pattern 可重复的图片

    示例:
    使用 strokeStyle 属性设置不同的颜色。
    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")

    ctx.strokeStyle = "blue"
    ctx.strokeRect(10,10,100,100)
    效果图:


    strokeStyle.png

    16、textAlign

    绘制文本时,文本的对齐方式的属性。注意,该对齐是基于CanvasRenderingContext2D.fillText方法的x的值。所以如果textAlign="center",那么该文本将画在 x-50%*width

    注:这里的textAlign="center"比较特殊。textAlign的值为center时候文本的居中是基于你在fillText的时候所给的x的值,也就是说文本一半在x的左边,一半在x的右边(比较通俗,描述不太清楚,自己实验一下就知道)。所以,如果你想让文本在整个canvas居中,就需要将fillText的x值设置成canvas的宽度的一半。

    语法:
    ctx.textAlign = "left" || "right" || "center" || "start" || "end"

    示例:

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.font = "48px serif"
    ctx.textAlign = "left"
    ctx.strokeText("Hello world" ,0,100)
    

    效果图:


    textAlign.png

    17、textBaseline

    当前文本基线的属性(决定文字垂直方向对齐方式)

    语法:
    ctx.textBaseline = "top" || "hanging" || "middle" || "alphabetic" || "ideographic" || "bottom"

    选项:
    top 顶部
    hanging 悬挂基线
    middle 中间
    alphabetic 标准的字母基线
    ideographic 表意字基线;如果字符本身超出了alphabetic表意字基线,那么ideograhpic基线位置在字符本身的底部
    botom 底部, 与ideographic基线的区别在于ideographic基线不需要考虑下行字母
    默认值是alphabetic

    示例:

    var canvas = document.getElementById("canvas")
    var ctx = canvas.getContext("2d")
    
    ctx.font = "48px serif"
    ctx.textBaseline = "hanging"
    ctx.strokeText("Hello world" ,0,100)
    
    效果图: textBaseline.png

    相关文章

      网友评论

          本文标题:Canvas 属性

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