用canvas画一个刮刮卡
这里是最终效果
思路
可以为canvas设置一个background的作为需要显示的目标图像,然后canvas绘制一个矩形作为遮罩层。或者通过position使用canvas覆盖在image标签上。
利用canvas的
globalCompositeOperation
属性可以很方便的操作绘图间的关系,详细可参考 w3school因为消除后的图形为透明图形。可以使用
getImageData
抓取canvas中的图像数据来判断已消除的面积。
实现
把目标图像设置为background
this.canvas.style.background = `url(${this.CONFIG.backgroundUrl}) no-repeat center center`
this.canvas.style.backgroundSize = 'cover'
复制代码
绘制一个遮罩层
drawGrayMask(){this.context.fillStyle = this.CONFIG.fillColorthis.context.fillRect(0,0,this.CONFIG.width, this.CONFIG.height)
}
复制代码
设置绘图效果
if (this.start){// 鼠标/手势 移动时,获取当前坐标 let x = e.touches ? e.touches[0].clientX : e.pageXlet y = e.touches ? e.touches[0].clientY : e.pageY// 设置canvas属性this.context.globalCompositeOperation = 'destination-out'this.drawLine(x, y)this.CONFIG.startX = xthis.CONFIG.startY = y
}
复制代码
判断绘制的图像占整个canvas的比例
// 获取当前透明的面积
for (let i=0; i<datas.length-3; i+=4){if (datas[i] === 0 && datas[i+1] === 0 && datas[i+2] === 0 && datas[i+3] === 0){transparent++}
}// 当透明面积超过总面积50%,清除所有的遮罩层
if(transparent > this.CONFIG.width*this.CONFIG.height*0.5){this.run()
}
复制代码
清除整个遮罩层
clearCanvas(){// 绘制一个面积超过canvas面积的圆this.context.beginPath()this.context.globalCompositeOperation = 'destination-out'this.context.arc(this.CONFIG.width/2, this.CONFIG.height/2, this.CONFIG.currentRadius, 0, 2*Math.PI)this.context.fill()this.context.closePath()
}update(){ if (this.CONFIG.currentRadius < this.CONFIG.width || this.CONFIG.currentRadius<this.CONFIG.height){this.CONFIG.currentRadius *= this.CONFIG.clearSpeed}
}复制代码
转载于:https://juejin.im/post/5c874d03e51d455aa333e10b
用canvas画一个刮刮卡相关推荐
- python程序、画一个笑脸_如何使用canvas画一个微笑的表情(代码示例)
本篇文章给大家带来的内容是关于如何使用canvas画一个微笑的表情(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 实习期间让我用canvas画一个表情,比较简单,话不多说 ...
- [html] 请使用canvas画一个椭圆
[html] 请使用canvas画一个椭圆 <script> var c=document.getElementById("myCanvas"); var ctx=c. ...
- [html] 请使用canvas画一个渐变的长方形
[html] 请使用canvas画一个渐变的长方形 // 普通canvas绘图工具类// umd适配多种引入方式 (function(root, factory) {if (typeof define ...
- 用canvas画一个太极图(八卦图)
用canvas画一个太极图(八卦图) 源码展示链接: https://yanhappiness.github.io/Notes/canvas_src.html 理解什么是canvas canvas是H ...
- 如何利用canvas画一个圆,并且填充颜色
如何利用canvas画一个圆,并且填充颜色(小白专用,大佬勿看) canvas基础 相信在此之前,你对canvas已经有一定的了解了,接下来我将介绍,如何利用canvas画一个圆. 1.新建一个htm ...
- 用canvas画一个五星红旗
利用canvas画一个好看的五星红旗!!! 简单,容易上手! <!DOCTYPE html> <html lang="utf-8"> <meta ht ...
- 用canvas画一个简易的机器猫头像
用canvas画一个机器猫的头像,原图如下: 代码实现效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <he ...
- 使用H5 canvas画一个坦克
具体步骤如下: 1. 首先做出绘图区,作为坦克的战场 <canvas id="floor" width="800px" height="50 ...
- html5 --- 使用canvas画一个渐变矩形
我们希望得到如下效果: 首先准备画布 // HTML <canvas width="500" height="375" id ="a" ...
- 【css】使用 canvas 画一个圆、贝塞尔曲线画对话气泡
画一个圆 HTML <canvas id="canvas"></canvas> JavaScript var canvas = document.getEl ...
最新文章
- 【神经网络】(7) 迁移学习(CNN-MobileNetV2),案例:乳腺癌二分类
- Amazon Redshift 架构
- VC++连接Mysql
- FLV协议5分钟入门浅析
- LeetCode MySQL 1741. 查找每个员工花费的总时间
- java五子棋(可悔棋,人人+人机对弈)
- 解决thrift: ···No such file or directory问题
- 怎样阻止电脑开机自动安装大量垃圾软件
- 使用delphi 10.2 开发linux 上的Daemon
- 基于Matlab的自适应低通滤波器设计,课程设计-低通滤波器设计(含matlab程序)
- 对于三极管饱和状态的理解
- AVR PIC单片机视频教程
- C语言100ms周期运行时间不够,DEH-系统调研报告.docx
- EZStation如何登陆云端账号、密码?
- object-c 字符串 c语言字符,Objective-C中字符串的拼接方法小结
- 已解决IndentationError: unindent does not match any outer indentation level
- 【视线追踪】视线追踪的性能评估框架 及 基础知识
- 玩游戏计算机什么比较重要,台式机和笔记本玩游戏-玩游戏电脑三大件哪一个最重要? – 手机爱问...
- 微信小程序云函数中的数据处理后返回
- 您所需要的已经不是吃饱喝足和睡暖了
热门文章
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_5_flush方法和close方法的区别...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_3_字符输出流_Writer类FileWriter类...
- Mysql基本语句(个人笔记)
- DAG最小可重路径覆盖or最长反链的一种做法
- js点击a链接弹出alert对话框
- Linux系统各个目录的一般作用
- Microsoft SQL Server是如何加密口令的?未公开的加密函数
- 关于阿里巴巴发布普惠体的一些思考
- Docker概念学习系列之详谈Docker 的核心组件与概念(5)
- ustc FreeBSD / rust 镜像源