canvas实现刮刮卡效果

发布时间 - 2026-01-11 00:09:59    点击率:

目前在html5和css3的热潮下,html页面的效果也是层出不穷,下面我们来介绍使用canvas来模仿刮奖刮开效果。

原理

在需要刮出的图片或者文字上方盖上一层灰色或者其他背景的canvas画布,当手指或者鼠标点击画布并移动时,将画布上移动过的轨迹变成透明即可。

分析

demo中在class为content的div上盖上一层灰色的画布,然后通过获取鼠标和手指的坐标计算出在画布位置上的坐标,通过在坐标原点位置画一个半径10px的透明圆形来透过画布,显示出画布下的内容。本demo是用时需要改变的内容为_width,_height,touchTop,touchLeft这几个参数,根据自身画布的位置自行计算即可。由于是长按事件,记得在移动端阻止浏览器默认功能。

效果图:

图(1)初始图

图(2)刮开效果

代码如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" />
<style>
.content,.cover{width:400px; height:400px; position:absolute; left:50%; top:50%; margin:-200px 0 0 -200px;}
.content{ font-size:48px; line-height:400px; text-align:center;}
h3{ text-align:center; line-height:200px;}
</style>
</head>
<body>
 <h3>快来刮开!!!</h3>
 <div class="content" >中奖啦~!</div>
 <canvas id="cover" class="cover" width="400" height="400"></canvas>
</body>
<script>
var isdown = false,
 cover = document.getElementById("cover"),
 covercanvas = cover.getContext("2d");
 //
 covercanvas.fillStyle="transparent";
 covercanvas.fillRect(0,0,400,400);
 function fillter( canvas ){
 canvas.fillStyle="#ccc";
 canvas.fillRect(0,0,400,400);
 }
 function isDown(e){
 e.preventDefault();
 isdown=true; 
 }
 function isUp(e){
 isdown=false; 
 }
 function draw( e ){
 e.preventDefault();
 if(isdown){
 if(e.changedTouches){
  e=e.changedTouches[e.changedTouches.length-1];
  }
 var _height= parseInt((window.innerHeight-400)/2),
 _width= parseInt((window.innerWidth-400)/2),
 touchTop=e.clientY - _height,
 touchLeft=e.clientX - _width;
 with(covercanvas){
 beginPath();
 arc(touchLeft, touchTop, 10, 0, Math.PI * 2);
 fill();
 } 
 }
 //alert(touchTop);
 }
 fillter(covercanvas);
 covercanvas.globalCompositeOperation = 'destination-out';
 cover.addEventListener('touchstart',isDown);
 cover.addEventListener('touchmove',draw);
 cover.addEventListener('touchend',isUp);
 cover.addEventListener('mousemove',draw);
 cover.addEventListener('mousedown',isDown);
 cover.addEventListener('mouseup',isUp);
</script>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# canvas实现刮奖效果  # 刮刮卡效果  # canvas  # 刮刮卡  # 利用HTML5的画布Canvas实现刮刮卡效果  # javascript+canvas实现刮刮卡抽奖效果  # jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】  # 手机端js和html5刮刮卡效果  # js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS  # canvas绘制刮刮卡效果  # 鼠标  # 快来  # 这几个  # 或者其他  # 层出不穷  # 出在  # 上一层  # 无标题文档  # 画一  # 鼠标点击  # 上盖  # viewport  # title  # gt  # doctype  # lt  # head  # utf  # charset  # meta 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何做网站制作流程,*游戏网站怎么搭建?  如何在万网自助建站中设置域名及备案?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  ,南京靠谱的征婚网站?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  微信小程序 HTTPS报错整理常见问题及解决方案  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何用低价快速搭建高质量网站?  如何在Windows虚拟主机上快速搭建网站?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何用花生壳三步快速搭建专属网站?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel如何配置任务调度?(Cron Job示例)  如何在腾讯云服务器上快速搭建个人网站?  Firefox Developer Edition开发者版本入口  英语简历制作免费网站推荐,如何将简历翻译成英文?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  SQL查询语句优化的实用方法总结  高端网站建设与定制开发一站式解决方案 中企动力  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  JavaScript模板引擎Template.js使用详解  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  如何快速使用云服务器搭建个人网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  *服务器网站为何频现安全漏洞?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  如何为不同团队 ID 动态生成多个独立按钮  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  网站制作软件有哪些,制图软件有哪些?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  北京网站制作公司哪家好一点,北京租房网站有哪些?  网站图片在线制作软件,怎么在图片上做链接?  BootStrap整体框架之基础布局组件  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何快速生成凡客建站的专业级图册?  音响网站制作视频教程,隆霸音响官方网站?  如何在阿里云ECS服务器部署织梦CMS网站?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何快速搭建高效WAP手机网站吸引移动用户?  如何在搬瓦工VPS快速搭建网站?  在Oracle关闭情况下如何修改spfile的参数  Laravel如何实现文件上传和存储?(本地与S3配置)