HTML5画布canvas实战(2)--刮刮乐(模拟刮卡中奖)

﹏ヽ暗。殇╰゛Y 2022-02-23 08:38 615阅读 0赞

插播一段广告

HTML5 canvas 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成 canvas 标签只是图形容器,您必须使用脚本来绘制图形。你可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。

画布 MDN文档

广告之后马上回来–需要用到的API解释

getContext()

  1. 渲染上下文:canvas创造了一个固定大小的画布,它公开了一个或多个渲染上下文,其可以用来绘制和处理要展示的内容。我们将会将注意力放在2D渲染上下文中。其他种类的上下文也许提供了不同种类的渲染方式
  2. canvas起初是空白的。为了展示,首先脚本需要找到渲染上下文,然后在它的上面绘制。 元素有一个叫做 getContext() 的方法,这个方法是用来获得渲染上下文和它的绘画功能。getContext()只有一个参数,上下文的格式。
  3. 语法

    var cxt = canvas.getContext(‘2d’)

文本相关的API

  1. ctx.fillText(text, x, y [, maxWidth]):在 (x, y)位置填充文本(text)的方法。如果选项的第四个参数提供了最大宽度(maxWidth),文本会进行缩放以适应最大宽度。
  2. strokeText() 是 Canvas 2D API 在给定的 (x, y) 位置绘制文本的方法。
  3. ctx.measureText(text):返回一个 TextMetrics 对象,包含关于文本尺寸的信息(例如文本的宽度)。
  4. ctx.textAlign = "left" || "right" || "center" || "start" || "end":基于你在fillText的时候所给的x的值的对齐方式
  5. ctx.textBaseline = "top" || "hanging" || "middle" || "alphabetic" || "ideographic" || "bottom":决定文字垂直方向的对齐方式。
  6. ctx.font = value:符合CSS font 语法的DOMString 字符串。

clearRect()

  1. void ctx.clearRect(x, y, width, height);

The CanvasRenderingContext2D.clearRect() 是 Canvas 2D API 设置指定矩形区域内(以 点 (x, y) 为起点,范围是(width, height) )所有像素变成透明,并擦除之前绘制的所有内容的方法。

你没有走错片场,开始入正题了…

先看效果图
效果图

定义两个画布

  1. 一个画布用来存放文字
  2. 一个画布用来放遮罩层


在画布中心写上中奖消息

  1. 获取上下文

    let myCan1 = document.querySelector(‘#can1’)

    1. let myCan2 = document.querySelector('#can2')
    2. let cxt1 = myCan1.getContext('2d')
    3. let cxt2 = myCan2.getContext('2d')
  2. 在第一张画布“#can1”定义我们的中奖消息(既然虚拟的就写得高大上一点)

    let award = “索尼70英寸液晶电视配套的遥控器一个”

  3. 获取画布上的宽高,并求出中心点(两张画布是保持一致的)

    let w = cxt1.canvas.width

    1. let h = cxt1.canvas.height
    2. let x = w / 2
    3. let y = h / 2
  4. 在第一张画布“#can1”中心上绘制文字

    cxt1.font = ‘30px Miscrosoft Yahei’

    1. cxt1.textAlign = 'center'
    2. cxt1.textBaseline = 'middle'
    3. cxt1.fillStyle = 'hotpink'
    4. cxt1.fillText(award,x,y)
  5. 在第二张画布“#can2”做手脚,绘制一个长方形遮住第一张画布“#can1”上的文字

    cxt2.beginPath()

    1. cxt2.fillStyle = '#eee'
    2. cxt2.fillRect(0,0,w,h)
  6. 开始清除第二张画布的内容”#can2”

    • 鼠标进入画布时,按下的时候清除
    • 获取鼠标在画布中的位置
    • 鼠标在清除面积的中心

    var bool = false // 只有鼠标在按下的时候移动才有效

    1. var area = 10 // 定义清除面积
    2. document.onmousedown = function (e) {
    3. bool = true
    4. }
    5. myCan2.onmousemove = function (e) {
    6. if(!bool){
    7. return
    8. }
    9. // 获取鼠标在画布中的位置
    10. let x = e.pageX - this.offsetLeft
    11. let y = e.pageY - this.offsetTop
    12. cxt2.clearRect(x - area/2,y-area/2,area,area)
    13. }
    14. document.onmouseup = function () {
    15. bool = false
    16. }

其它思路

  1. 使用两个画布:我们可以将绘制文字放在图片里面,使用cxt.drawImage()
  2. 可以试着将画布改为div也可以,即canvas+div
  3. 如果只使用一张画布,就是只渲染canvas元素一次,那么该画布只能放背景图片了;否则使用clearRect()会清除掉所有绘制的
  4. 最后一种思路,这种思路比较有潜能,可能具有颠覆性,就是七个字:暂时还没有想到

发表评论

表情:
评论列表 (有 0 条评论,615人围观)

还没有评论,来说两句吧...

相关阅读

    相关 canvas应用----

    最近在学习html5,为了更好地学习和帮助其他人我决定把我写过的案例写下来~~ 先说一下刮刮乐这个程序实现的注意点 材料:一张图片和canvas画布 在html

    相关 H5canvas

    原理:利用globalCompositeOperation 抠出来那个画出来的那个图像设置为透明,然后就能看到这个画布下层的图片 api: globalCompositeO