需要用到的知识点

1.canvas globalCompositeOperation : 设置或返回如何将一个源(新的)图像绘制到目标(已有的)的图像上 ,这个属性是重点
2.canvas getImageData:getImageData() 方法返回 ImageData 对象,该对象拷贝了画布指定矩形的像素数据。
3.Element.getBoundingClientRect:方法返回元素的大小及其相对于视口的位置。

效果图:

css

 *{padding: 0;margin: 0;}body{display: flex;align-items: center;justify-content: center;flex-direction: column;height: 100vh;}.canvas_box{position: relative;width: 569px;height: 234px;border: 1px solid #ccc;}.canvas_box img{position: absolute;left: 0;top: 0;width: 569px;height: 234px;}.canvas_box canvas{position: absolute;left: 0;top: 0;z-index: 10;}button{width: 200px;height: 100px;font-size: 16px;}

html

    <div class="canvas_box"><img src="./canvas_btm.png" alt="刮刮乐底图"><canvas  id="canvas"></canvas></div><button id="button">再来一次</button>

javascript

window.onload = function(){var mousedown = false;//判断是否在canvas按下var canvas = document.getElementById('canvas');var button = document.getElementById('button');var ctx = canvas.getContext('2d');var w = 569,h = 234;canvas.width = w;canvas.height = h;//给画布添加事件//若需要在pc端展示,请将下面的事件改为pc端事件mousedown、mouseup、mousemovecanvas.addEventListener('touchstart',function (ev) {ev = ev || event;ev.preventDefault();mousedown = true;});canvas.addEventListener('touchmove',function (ev) {ev = ev || event;ev.preventDefault();if(mousedown) {if(ev.changedTouches){ev=ev.changedTouches[ev.changedTouches.length-1];}var position = canvas.getBoundingClientRect();//获取当前元素相对于屏幕的坐标var x = ev.pageX - position.left;var y = ev.pageY - position.top;ctx.beginPath();ctx.arc(x, y, 20, 0, Math.PI * 2);ctx.fill();isArea();}});canvas.addEventListener('touchend',function (ev) {ev = ev || event;ev.preventDefault();mousedown = false});//给按钮添加再来一次事件button.addEventListener('touchstart',function () {init();});init();function init(){//初始化画布的状态ctx.canvas.style.opacity = 1;//给画布铺底色ctx.fillStyle = 'purple';ctx.fillRect(0, 0, w, h);ctx.globalCompositeOperation = 'destination-out';//重点}function isArea(){//判断刮开面积是否到达百分之六十var data = ctx.getImageData(0,0,w,h).data;//获取画布的信息var n = 0 ;for (var i = 0; i < data.length; i++) {if (data[i] == 0) {n++;};};if (n >= data.length * 0.6) {ctx.globalCompositeOperation = 'destination-over';//重点ctx.canvas.style.opacity = 0;alert('教程结束')}}}

js 实现刮刮乐卡片效果相关推荐

  1. html5中canvas画布实现手机端和移动端的刮刮乐效果

    用html5中的canvas实现刮刮乐的效果 使用html+css实现背景的样式 使用clearRect()方法实现挂去的作用 手机端使用addEventListener()监听 手机端滑动事件tou ...

  2. 简单的Canvas刮刮乐带动画效果的实例

    今天做了个刮刮乐领奖品的小活动,感觉挺有用的,整理在这儿记录下 上个效果图先: 加了个简单的 css 动画效果 下面贴上主要代码: index.html <!DOCTYPE html> & ...

  3. Canvas 实现刮刮乐 js实现刮刮乐

    Canvas 实现刮刮乐 js实现刮刮乐 **思路: (1)首先需要一个盒子定位,确定刮刮乐区域想要放在哪里 (2)定位盒子里有个放内容的盒子,也就是放奖品的 (3)用一个画布(canvas)把上面的 ...

  4. 刮刮乐html5效果擦除,利用HTML5的画布Canvas实现刮刮卡效果

    先给大家展示效果: 你玩过刮刮卡么?一不小心可以中奖的那种.今天我给大家分享一个基于HTML5技术实现的刮刮卡效果,在PC上只需按住鼠标,在手机上你只需按住指头,轻轻刮去图层就可以模拟真实的刮奖效果. ...

  5. iOS 仿支付宝刮刮乐效果

    支付宝里有个刮刮乐中奖, 和大街小巷里的类似彩票刮刮乐的效果一样. 实现思路, 其实很简单的三步: 展示刮出来的效果的view: 即刮开后刮刮乐效果展示-显示的文字Label 设置遮挡在外面的Imag ...

  6. iOS-仿支付宝刮刮乐效果

    概述 仿支付宝刮刮乐效果, 可以按照自己需求更改展示刮出来的效果的view(即刮开后刮刮乐效果展示) 详细 代码下载:http://www.demodashi.com/demo/10673.html ...

  7. 【游戏客户端】实现刮刮乐效果

    [游戏客户端]实现刮刮乐效果       之前的博客中,我和大家分享了如何做: 商业化的充值活动 :[商业化充值活动博客] 抽卡系统:[抽奖,抽卡系统博客] 装备系统:[装备系统博客] 红点系统:[红 ...

  8. 【Unity】刮刮乐效果(擦除图片像素值)

    实现类似刮刮乐效果,擦除图片指定像素值(修改图片Alfa通道) 参考Unity刮刮乐工程源码的实现原理,对实现方式有一些调整 这里RawImage需要保持原图大小,不能缩放,不然坐标计算会有偏差 us ...

  9. android 实现刮刮乐刮奖效果

    在做电商类产品时,经常会有一些活动需求,如抽奖,抽奖的一种方式就是刮刮乐,这次的内容是利用重写View的方式实现刮刮乐的效果. 思路:利用Bitmap做刮奖区的蒙版,利用paint将手指触摸过的区域置 ...

最新文章

  1. html与xml头部你懂吗?
  2. 像DW的应用源格式那样格式化VS里面的代码
  3. python莱布尼茨法计算π_酷叮猫少儿编程讲堂——Python 用莱布尼茨等式求π
  4. 容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)
  5. springboot 历史版本文档_乘风破浪,SpringBoot入门
  6. 蚂蚁的开放:想办法摸到10米的篮筐
  7. 【kafka】kafka 消费速度 小于 日志清理速度 (kafka数据被清理了)会发生什么 auto.offset.reset 参数
  8. matlab虚拟现实之工具介绍(修改)
  9. 如果SQL Server 配置管理器没有找到就代表安装失败?
  10. JavaScript权威指南--chapter 8函数
  11. 5.jenkins 自动部署
  12. 软件测试面试题整理(一)之自动化测试题大合集
  13. Android高级UI系列教程(一)
  14. 转载 基于MATLAB 进行图像分类
  15. Ace - Responsive Admin Template
  16. 关于下载pdf请求不到数据问题
  17. JAVA 对接钉钉API(人员、部门、官方智能工作流)20210527
  18. 从零开始的openGL--cs游戏(14) 延迟渲染G缓冲。
  19. ubuntu11.04下Discuz论坛的安装
  20. 黑魂复刻游戏的玩家输入模块——Unity随手记(2021.3.14)

热门文章

  1. 《营销5.0后互联网时代的企业战略营销》读书笔记
  2. 论文笔记:Perceptual-Sensitive GAN for Generating Adversarial Patches
  3. 戴尔inspiron 14-7460键盘出问题
  4. Silver Cow Party (POJ - 3268 )
  5. samsung q1u android,7英寸LCD触摸屏 三星Q1U掌心中的笔记本
  6. springboot 打印sql日志
  7. 快到我跟老婆的结婚纪念日了
  8. HTML学习教程之高阶学习
  9. (转)CEvent,CSemaphore,CCriticalSection,CMutex
  10. JVM:33 如何查看JVM的Full GC日志